一、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' ./

猜你喜欢

转载自www.cnblogs.com/nuochengze/p/13401622.html