图片来源于网上
记一次某个小项目的发版流程:
a,使用Dockerfile构建(build)一个镜像(image);
b,导出(save)这个镜像为backup.tar;
c,上传backup.tar到另外一个服务器,并导入(load)这个镜像;
d,之前导出的时候是按照镜像id(imageId)导出的,导入后没有tag信息(none),为这个镜像打上(tag)标签;
e,推送(push)这个镜像到远程仓库(阿里云),这步后来省略了;
f,停止(stop)之前的容器(container),删除(rm)之前的容器;
g,运行(run)这个镜像(image),run命令 = 创建容器 + 启动(start)容器;
上图其他:
pull:从远程仓库拉取镜像,就不需要手动上传镜像了;
commit:进入容器后做了一些修改,想要保存这些修改,使用commit命令,从容器创建一个新的镜像;
1,使用Dockerfile构建镜像
docker build -t 仓库REPOSITORY:标签TAG .(点表示当前目录)
Dockerfile指令:
FROM 基础镜像,本地没有该基础镜像会从远程拉取
COPY 把宿主的文件拷贝到镜像中
2,导出导入镜像(把镜像放到另外一个环境上时需要)
导出:docker save (镜像id) > /本地目录/docker.tar
使用镜像id会丢失tag信息,导入后可重新tag,docker tag 镜像id 仓库REPOSITORY:标签TAG;
或者docker save 仓库REPOSITORY:标签TAG > /本地目录/docker.tar
导入:docker load -i docker.tar
3,删除容器
停止:docker stop (容器id)
删除:docker rm (容器id)
4,运行镜像
运行镜像 = 创建容器 + 启动容器
docker run = docker create + docker start
docker run -d -p 宿主端口:容器端口 -p 443:443 -p 1111:2222 -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v 宿主文件:容器文件 --name 容器名称 仓库REPOSITORY:标签TAG
-p:访问宿主的端口就等于访问容器的端口?
-v:容器外挂载目录中文件的修改和添加同步到容器中对应的文件
5,查看镜像、容器
查看镜像:docker images
查看容器:docker ps
进入容器:docker exec -it 容器id /bin/bash;
进入容器后可以ls查看目录、cd目录等等操作;
可以校验Dockerfile的COPY指令是否成功(docker build时是否将宿主的文件copy过来了);
可以校验容器外挂载目录中文件的修改和添加是否同步到容器中对应的文件了等等;
退出容器:ctrl + d