Docker实训
Docker入门
镜像和容器
使用步骤:
- 拉取镜像
- 用镜像创建容器
- 进入容器
拉取镜像
docker pull imageName:version
可设置镜像加速器
启动容器
新建容器并启动:docker run imageName:version
,-i
保持io流对容器开放,-t
分配终端,--name
设置容器名
启动已有容器:docker start containerName
查看容器信息:docker ps -a
停止容器
停止正在运行的容器:docker stop containerName
,-t
指定等待时间
Docker容器以sh为主进程,执行完启动命令,主进程将停止,容器也将自动终止。
容器启动后不立即停止:
- 启动命令设置为死循环
- 启动命令设置为某个一直运行的子进程
进入容器
docker run
中-d
可以使容器在后台运行
进入一个docker容器的几种方法:
- 使用
ssh
登陆进容器; - 使用
nsenter、nsinit
等第三方工具; - 使用
docker
本身提供的工具:exec
和attach
先docker run
创建容器并让它在后台执行,在用docker attach
进入容器内部,其实就是进入容器启动命令的终端
docker exec
则可以在容器内部执行一条命令
删除容器
删除终止状态的容器:docker rm containerName
删除运行状态的容器:
- 先
docker stop
,再docker rm
- 强制删除
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
删除容器时同时删除数据卷,若数据卷仍被使用则无法删除
删除正在使用的数据卷:
docker rm -v containerName
解除数据卷和容器的关系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
新容器,旧容器和主机一起实现的数据卷备份和恢复,新容器和旧容器共享,主机数据卷挂载到新主机。