Docker实训

Docker入门

镜像和容器

使用步骤:

  1. 拉取镜像
  2. 用镜像创建容器
  3. 进入容器

拉取镜像

docker pull imageName:version

可设置镜像加速器

启动容器

新建容器并启动:docker run imageName:version-i保持io流对容器开放,-t分配终端,--name设置容器名

启动已有容器:docker start containerName

查看容器信息:docker ps -a

停止容器

停止正在运行的容器:docker stop containerName-t指定等待时间

Docker容器以sh为主进程,执行完启动命令,主进程将停止,容器也将自动终止。

容器启动后不立即停止:

  1. 启动命令设置为死循环
  2. 启动命令设置为某个一直运行的子进程

进入容器

docker run-d可以使容器在后台运行

进入一个docker容器的几种方法:

  1. 使用ssh登陆进容器;
  2. 使用nsenter、nsinit等第三方工具;
  3. 使用docker本身提供的工具:execattach

docker run创建容器并让它在后台执行,在用docker attach进入容器内部,其实就是进入容器启动命令的终端

docker exec则可以在容器内部执行一条命令

删除容器

删除终止状态的容器:docker rm containerName

删除运行状态的容器:

  1. docker stop,再docker rm
  2. 强制删除docker rm -f

查看所有容器ID:docker ps –a –q

Docker镜像管理

Commit制作镜像

docker run -p 80:80将主机的80端口映射到容器的80端口

docker commit containerName imageName将容器保存成镜像

保存和加载镜像

保存镜像:docker save imageName1:version imageName2:version > tarName.tar

加载镜像:docker load < tarName.tar

导入导出容器

把容器的文件系统保存为tar包:docker export containerName -o tarName.tar

从tar包导入镜像:docker import tarName.tar imageName:version

删除镜像

docker rmi image-f表示强制删除

构建私有仓库

创建私人仓库:docker run -d -p 5000:5000 --restart=always --name registry registry:2-v可以指定仓库位置

镜像加标签:docker tag imageName:version tagName

推送镜像到仓库:docker push tagName,如果tagName正好是主机名:端口号则推送到私人仓库

从私人仓库拉取镜像:docker pull tagName

删除私人仓库:docker rm repoName-f表示强制,-v表示删除仓库的同时删除其中镜像

Dockerfile

用于构建镜像

FROM和RUN

FROM imgaeName:version指定构建镜像的基础镜像

RUN 命令创建容器并执行命令,命令结束后提交容器为新镜像

build,COPY和ADD

构建镜像:docker build -t foo .-t指定名字,-f指定Dockerfile

COPY 源路径 目标路径将源路径复制到目标路径,源路径必须为绝对路径

ADD 源路径 目标路径COPY的加强版,可自动解压tar包,自动下载文件等等操作

CMD和ENTRYPOINT

CMD [命令,参数1,参数2]设置容器启动时的默认命令,可被覆盖,可作为ENTRYPOINT的参数

ENTRYPOINT [命令,参数1,参数2]设置容器启动时的默认命令,不可被覆盖

ENV,EXPOSE,WORKDIR和ARG

WORKDIR 路径设置工作目录

ENV key value设置环境变量

ARG argName设置参数,可被之后指令及docker build使用

EXPOSE port1暴露端口,只是一个声明,仍需要在docker run中用-p指定端口

ONBUILD和VOLUME

ONBUILD 其他指令其他指令为RUN,COPY等等指令,当前镜像中不会使用,仅用于下一级镜像构建,不会被继承

VOLUME 路径定义数据卷

缓存

none

Docker数据卷

创建数据卷

docker volume create --name volName创建数据卷

docker run -v /data创建一个随机名字的数据卷,并挂载到容器的/data

docker run -v volName:/data创建volName数据卷,并挂载到容器的/data

挂载和共享数据卷

docker run --name containerName -v /host/dir:/container/dir将主机的/host/dir挂载到/container/dir

docker run --name volName2 --volumes-from volName1创建volName2并与volName1共享数据卷

查看数据卷信息

docker inspect可查看镜像,容器,数据卷等的具体信息

删除数据卷

docker volume rm volName若数据卷仍被使用则无法删除

docekr rm -v containerName删除容器时同时删除数据卷,若数据卷仍被使用则无法删除

删除正在使用的数据卷:

  1. docker rm -v containerName解除数据卷和容器的关系
  2. docker volume rm volName删除数据卷

备份和恢复数据卷

$(pwd)表示当前目录

docker run --volumes-from CONTAINER_NAME -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /path/to/data将CONTAINER_NAME的/path/to/data备份到主机的当前目录

docker run --volumes-from dbcontainer2 -v $(pwd):/backup busybox tar -xvf /backup/backup.tar -C /dbdata

新容器,旧容器和主机一起实现的数据卷备份和恢复,新容器和旧容器共享,主机数据卷挂载到新主机。