zoukankan      html  css  js  c++  java
  • 一、Docker

    1、Docker介绍

    • 官方中文文档

      http://www.dockerinfo.net/document

    • 安装docker

      • sudo apt install docker.io
    • 使用docker

      • 方法一

        以管理员权限,运行docker命令

      • 方法二

        sudo groupadd docker 	# 添加docker用户组
        sudo gpasswd -a $USER docker	# 将登录用户加入到docker用户组中
        newgrp docker	# 更新用户组
        docker ps	# 测试docker命令是否可以在不使用sudo的情况下使用
        

    2、Docker使用

    • 基础镜像拉取

      docker search centos
      docker pull centos:6.9
      
    • 镜像基础查看

      docker image ls
      
      标识镜像唯一性的方法:
      1.REPOSITORY:TAG
      2.IMAGE ID(sha256:64位的号码,默认只截取12位)
      
    • 镜像详细信息查看

      docker image ls --no-trunc	# 查询更详细的镜像信息
      docker image inspect ubuntu:latest	# 查询单个镜像的详细信息
      docker image ls -q	# 只查看镜像ID
      
    • 镜像的导入和导出

      docker image save IMAGE_ID > filepath/ubuntu.tar	# 导出镜像
      docker image load -i filepath/ubuntu.tar
      
    • 镜像的删除

      docker image rm IMAGE_ID -f 	# -f 强制删除
      docker image rm -f `docker image ls -q`		# 删除所有的镜像
      
    • 镜像标签的更改

      docker image tag IMAGE_ID old/ubu:v1	# 更改镜像标签
      

    3、容器的管理

    • 交互式容器

      docker container run -it IMAGE_ID	# 交互式启动容器
      docker container run -it --name="xxx" IMAGE_ID	# 手动指定容器名
      docker container run -it --name='xxx' IMAEG_ID --rm		# 添加--rm参数,当退出时,自动删除容器
      
    • 查看运行容器的状态

      docker container ls		# 查看运行的容器
      docker container ls -a	# 查看所有的容器,包括运行,不运行
      
      # CONTAINER_ID 	容器的唯一号码,自动生成
      # NAMES	容器的名字,可以自动,也可以自行指定
      # STATUS 容器运行的状态
      
    • 守护式容器

      docker run -d --name='xxx' nginx:1.14	# 启动守护式容器
      docker container ls -a	# 查看容器运行状态
      docker container inspect NMAES	# 查看容器的详细信息
      docker container rm NAMES	# 删除容器
      
    • 容器的应用场景

      • 交互式容器:工具类(开发、测试、临时性的任务)

        docker container run -it --name='xxx' IMAEG_ID --rm		# 添加--rm参数,当退出时,自动删除容器
        
      • 守护式容器:网络服务

        docker run -d -p 8080:80 --name='xxx' NAMES
        
    • 容器的启动、关闭和连接

      • 守护式

        docker container stop NAMES
        docker container start NAMES
        
      • 交互式

        docker container stop NAMES
        docker container start -i NAMES
        
    • 容器的连接方法

      docker container attach NAMES	# 进入后台运行的容器,原来有啥进程,就用啥进程
      docker container exec -it NAMES /bin/bash	# 开启子进程,进入容器,退出时不影响当前容器
      
    • 容器的后台及前台运行

    • ctrl+P, Q 扔到后台运行

      • attach 调用到前台

      • 启动死循环

      • 让程序前台一直运行(夯在前台)

        • docker container ls -a --no-trunc
      • 制作守护式容器时常用的方法

    • docker容器的网络访问

      • 指定映射(docker会自动添加一条iptables规则来实现端口映射)

        -p hostPort:containerPort
        -p ip:hostPort:containerPort
        -p ip::containerPort	# (随机端口:32768-60999)
        -p hostPort:containerPort/udp	# 默认是tcp
        -p 81:80 -p 443:443	# 一次映射多个端口
        
        # docker container run -d -p 80 --name="NAME" REPOSITORY:TAG
        
      • 随机映射

        docker container run -d -p 80 --name="NAME" REPOSITORY:TAG
        
    • docker容器的其他管理

      • 查看进程ID

        docker ps -a -q等价与docker container ls -a -q

        docker top NAMES等价于docker container top NAMES

      • 查看日志

        docker container logs NAMES # 查看操作记录

        docker container logs -t NAMES # 查看操作记录,带有时间戳

        docker container logs -tf NAMES

        docker container logs -tf --tail 10 NAMES # 查看最后10条记录

    • docker的数据卷实现持久化存储

      • 手工交互数据

        Usage:  docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
        	    docker container cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
        Info:   Copy files/folders between a container and the local filesystem
        
      • Volume实现宿主机和容器的数据共享(映射)

        docker container run -d --name='n2' -p 80:80 -v /home/nuochengze/Desktop/test:/usr/share/nginx/html nginx
        # 所有的变更,只能在容器生命周期内生效
        # 可以开启多个容器,同时挂载一个映射
        
      • 查看容器的挂载路径

        docker container inspect NAMES

      • 容器作为数据卷,实现数据共享

        作用: 在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷容器时,可以采用数据卷容器进行统一管理

        # 宿主机模拟数据目录
        mkdir -p /opt/Volume/a
        touch /opt/Volume/a/a.txt
        
        # 启动数据卷容器
        docker run -it --name='com_volumes' -v /opt/Volume/a:/opt/a centos:6.9 /bin/bash
        ctrl p q	# 将交互容器,变成后台运行
        
        # 使用数据卷容器
        docker container run -d -p 8081:80 --volumes-from com_volumes --name 'n1' nginx
        docker container run -d -p 8082:80 --volumes-from com_volumes --name 'n2' nginx
        

    4、docker镜像制作

    • 基于容器的镜像制作

      1. 启动基础镜像容器

        docker container -it --name='cs' centos

      2. 安装所需的软件包,并且启动测试

        yum install openssh-server -y

        /etc/init.d/sshd start

        /etc/init.d/sshd stop

        echo '12345' | passwd --stdin

      3. 镜像的制作

        docker commit cs registedname/centos_sshd:v1

      4. 基于新镜像启动容器实现

        docker container run -d --name='sshd_1' -p 2222:22 NAMES /usr/sbin/sshd -D

    5、dockfile定制镜像

    • dockerfile的基本使用方式

      1. 创建dockfile文件夹

        mkdir -p dockfile/centos_sshd/Dockerfile

      2. 编辑Dockerfile

        vim Dockerfile

        # centos6.9-SSHDv1.0
        
        
        # FROM centos:6.9 
        FROM centos@2199b8eb8390
        RUN  yum install openssh-server -y
        RUN /etc/init.d/sshd start && /etc/init.d/sshd stop && echo '123456' | passwd root --stdin
        EXPOSE 22
        CMD ['/usr/sbin/sshd', '-D']
        
        
        
        # RUN 后面加基础的shell命令
        # 将命令的逻辑理清楚后,全写到一行上,避免增加临时容器
        # RUN可以写多行
        
        
        # FROM 有两种语法
        # - syntax:
        # 第一种        centos:6.9
        # 第二种        centos@hashval  该hashval唯一定位该镜像
        
        
        # RUN 有两种语法
        # 第一种        基于shell的命令, 占大多数
        # 第二种        针对非shell命令,等专用程序命令  ['mysqld', '--initialize-insecure', '--user=mysql', '...'] 
        
        
        # COPY 从dockerfile所在目录,拷贝目标文件到容器的指定目录下
        #      可以支持通配符
        # 	   如果拷贝的是目录,只拷贝目录下的子文件和目录
        # - syntax:
        		COPY <src>  <dest>
        		
        # ADD 功能和COPY相似,比COPY命令多的功能是,可以自动解压.tar*的软件包到目标目录下
        #     可以指定源文件为url地址
        # - syntax:
        	<src>... <dest>
        	url      <dest>
        
        # ENV 设定变量
        # - syntax:
        	ENV CODEDIR /var/www/html
        	ENV DATADIR /data/mysql/data
        	ADD bbs.tar.gz ${CODEDIR}
        	VOLUME ['${CODEDIR}', '${DATADIR}']
        
        # WORKDIR
        
        
        # VOLUME ['/var/www/html', '/data/mysql/data']
        
        # ENTRYPOINT  可以在启动容器时,防止第一进程被手工输入的命令替换掉,防止容器秒起秒关
        
        # EXPOSE 向外暴露的端口
        # - syntax:
        #       EXPOSE 22
        
        
        # CMD 使用镜像启动容器时运行的命令
        # -syntax:
                ['/usr/sbin/sshd', '-D']
        
        
      3. 构建dockerfile镜像

        docker image build -t 'centos6.9-sshd:v1.0' ./

  • 相关阅读:
    从jvm的角度来看java的多线程
    jvm常用优化方案和方法
    JVM GC 机制与性能优化
    JVM 类加载机制详解
    (转)Java 详解 JVM 工作原理和流程
    Callable,Runnable异同
    使用Toast进行用户提醒(转)
    学好Java只需要做到这7点,年薪20W起步
    C# 之泛型详解
    C#中的委托和事件
  • 原文地址:https://www.cnblogs.com/nuochengze/p/13401622.html
Copyright © 2011-2022 走看看