【迁移与备份】
1 #1 镜像从哪来的? 2 1 docker pull 拉的,远程仓库--》国内镜像站 3 4 2 通过容器打包成镜像 5 -centos镜像运行成容器---》装了vim 6 -把装了vim的容器---》打包成镜像 7 -以后拿到这个镜像--》再运行成容器,都会带vim命令 8 9 3 Dockerfile构建 10 11 #2 容器保存为镜像 12 -运行一个centos容器(先把之前运行的镜像都删除) 13 docker run -id --name centos centos:centos7 14 -在容器中装vim 15 docker exec -it centos /bin/bash 16 yum install vim -y 17 18 -把容器做成镜像(centos+vim) 19 docker commit centos centos_vim_image 20 21 -把centos_vim 容器删除 22 docker rm centos_vim -f 23 -基于新构建的镜像,运行成容器 24 docker run -id --name centos_vim centos_vim_image:latest 25 -进入到容器中,查看,软件都在 26 docker exec -it c3e633bd1 /bin/bash 27 28 29 ============================================= 30 31 32 本地镜像---推送到远端docker仓库中---》私有仓库 33 -早期 这个是免费的---》后期好像收费 34 35 -给镜像打个tag 36 docker tag 镜像id 镜像新名字(账号名/镜像名) 37 -登录到你账号中 docker login 输入账号密码 38 39 40 -docker push 镜像名字 41 docker push 镜像新名字 42 -别人就可以下载了 43 44 45 46 #3 镜像备份和恢复 47 docker save -o centos_vim_image.tar centos_vim_image 48 -删除容器,删除镜像 49 -把备份的镜像恢复 50 docker load -i centos_vim_image.tar
。
。
【Dockerfile】
dockerfile介绍和常用命令
1 #1 镜像从哪里来的? 2 1 远程仓库拉取的 docker pull (hub.docker---》搭建私有仓库) 3 2 用容器做成的镜像 docker commit 4 3 把备份的恢复 docker load 5 4 使用Dockerfile来构建(这种多) 6 7 #2 什么是Dockerfile 8 Dockerfile是由一系列命令和参数构成的脚本文件,这些命令应用于基础镜像并最终创建一个新的镜像 9 10 # centos7中,装了vim,在根路径下新建了一个文件 lqz.txt,写了写内容 11 12 # 3 Dockerfile的命令 13 FROM 基础镜像 #基于哪个基础镜像来构建 14 MAINTAINER lqz # 声明镜像的创建者 15 ENV key value # 设置环境变量 (可以写多条) 16 ENV key value # 设置环境变量 (可以写多条) 17 RUN command #是Dockerfile的核心部分(可以写多条) 18 ADD source_dir/file dest_dir/file #将宿主机的文件复制到镜像内,如果是一个压缩文件,将会在复制后自动解压 19 COPY source_dir/file dest_dir/file # 和ADD相似,但是如果有压缩文件并不能解压 20 WORKDIR lqz # 设置工作目录,运行起这个容器,来到的路径就是这个路径 21 22 CMD # 启动并运行容器执行的命令
小案例
1 # 构建一个带vim的centos:7镜像,根路径下有/lqz/ss.py 2 3 vim Dockerfile 4 5 FROM centos:centos7 6 MAINTAINER jh 7 ENV name jh 8 ARG age 18 9 RUN mkdir /jh 10 RUN touch /jh/ss.py 11 RUN echo 'print(11)' > /jh/ss.py 12 RUN echo $name 13 RUN echo $age 14 WORKDIR /jh 15 16 17 18 19 # 基于dockerfile构建镜像,不要忘了 . 基于当前路径下的Dockerfile 构建镜像(本质原理:起来一个docker容器 ,运行上述命令,又打包成镜像) 20 docker build -t='centos_jh_vim' . 21 docker images 22 # 基于这个镜像运行容器 23 docker run -id --name xx centos_jh_vim 24 # 进入到容器 25 docker exec -it xx /bin/bash 26 # 验证vim,和文件夹,文件是否存在
案例2:
1 FROM centos:centos7 2 MAINTAINER wxx 3 ENV name wxx 4 RUN mkdir /wxx 5 RUN touch /wxx/ss.py 6 RUN echo 'input()' > /wxx/ss.py 7 WORKDIR /wxx 8 CMD ['python' ,'./ss.py'] # 运行容器时会默认加上 /bin/sh -c 9 10 # 基于dockerfile构建镜像,不要忘了 . 基于当前路径下的Dockerfile 构建镜像 11 docker build -t='centos_py' . 12 docker images 13 # 基于这个镜像运行容器 14 docker run -id --name yy centos_py python /wxx/ss.py 15 # 进入到容器 16 docker exec -it yy /bin/bash 17 # 查看环境变量 18 # python看 19 os.environ.get('name') 20 # shell看 21 echo $name
。
。
【Dockerfile常用和不常用命令】
1 # 1 所有命令 2 https://zhuanlan.zhihu.com/p/419175543?utm_id=0 3 4 FROM: 指定基础镜像 5 RUN: 构建镜像过程中需要执行的命令。可以有多条。docker build 6 CMD:添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改 7 ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。 8 LABEL:表明镜像的作者。将被遗弃,被LABEL代替。 9 EXPOSE:设置对外暴露的端口。 10 ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效 11 ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失 12 ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件 13 COPY:将本地文件或目录拷贝到镜像的文件系统中。 14 VOLUME:添加数据卷 15 USER:指定以哪个用户的名义执行RUN, CMD 和ENTRYPOINT等命令 16 WORKDIR:设置工作目录 17 18 19 # 2 docker logs 容器名字/id号 查看镜像运行成容器时,错误日志 20 -如果容器没起来,看日志排查错误 21 22 # 3 CMD ENTRYPOINT --https://zhuanlan.zhihu.com/p/548188679 23 #相同点: 24 只能写一条,如果写了多条,那么只有最后一条生效。 25 容器启动时才运行,运行时机相同。 26 # 不同点: 27 ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖。 28 如果我们在Dockerfile中同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数 29 30 # 4 ARG 和 ENV 31 ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效 32 ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失
。
。
dockerfile构建一个djagno项目(books图书管理系统)
1 # 以图书管理系统为例---》公司使用docker流程 2 3 4 # 公司中,使用Docker开发的工作流程 5 第一步:有一个项目,pycharm开发着,开发完后 6 第二步:在项目路径下新建Dockerfile,写入 7 FROM python 8 MAINTAINER lqz 9 WORKDIR /soft 10 COPY ./requirements.txt /soft/requirements.txt 11 RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple 12 CMD ["python","manage.py","runserver","0.0.0.0:8080"] 13 第三步:把代码提交到git 14 15 16 ------------------ 17 第四步:上线人员:在上线机器上,把代码啦下来 18 git clone https://gitee.com/liuqingzheng/books.git 19 第五步:构建镜像 20 docker build -t='django_books' . 21 第六步:运行容器 22 docker run -id --name=books -v /root/project/books:/soft -p 8080:8080 django_books:latest 23 第七步:其它人访问宿主机的8080端口就能看到项目了 24 25 --------- 26 第八步:开发人员继续提交代码 27 第九步:运维人员pull代码,重启容器,用户就可以看到最新的了 28 29 重启docker容器即可(第三方依赖变了)--》重写构建镜像,运行容器
乌班图构建redis(跟底层宿主机无关):参考文章https://zhuanlan.zhihu.com/p/623811065
。
。
【docker 私有仓库】
有个远程仓库 ,docker官方提供的 ---》我们可以把我们的镜像传上去
公司做的镜像,一般不放在远程仓库,公司会自己搭建私有仓库(把公司制作的镜像传到私有仓库)
【镜像传到官方仓库】
1 目前情况做不了 2 3 # 第0步:在远端创建仓库 4 # 第一步:给镜像打标签 5 docker tag 086e6b3e71c0 liuqingzheng/lqz_books:v1 6 # 第二步:登录到远程 7 docker login 8 用户名:不是邮箱 9 密码:挺复杂 10 11 # 第三步:提交 12 docker push liuqingzheng/lqz_books:v1 13 14 # 第四步:别人就可以下载了 15 docker pull liuqingzheng/lqz_books:v1
【镜像分层】
1 每一个Dockerfile命令都会构建一层镜像(本质上是每一层都会启动一个容器,执行完命令后,将容器进行提交,通过查看下载下来的镜像,发现历史层信息的层ID是missing,其实是因为原本的层id只存在于构建镜像的宿主机上,一旦转移镜像后,历史层消息中将只保留最新一层的ID 2 3 4 # 只要执行一个命令就会多一层 5 RUN yum install vim -y 6 RUN yum install git -y 7 8 9 # 查看镜像分层的命令 10 docker history liuqingzheng/lqz_books:v1 11 # 好处: 12 构建快,分发方便,如果本地有某一层了,这一层就不需要下载了 13 14 15 # 补充:Dcokerfile写命令,建议多条命令合为一条---》只会生成一层 16 RUN python -m pip install --upgrade pip &&\ 17 python -m pip install --upgrade setuptools &&\ 18 pip install -r requirements.txt
【私有仓库搭建】
1 # 自己搭建私有仓库 2 -harbor:企业级私有仓库---》(有图形化界面--》跟hub.docker 很像) https://blog.csdn.net/weixin_47085247/article/details/129237979 3 4 -registry:用docker搭建私有仓库(没有图形化界面) 5 6 # 搭建步骤:(使用docker搭建docker私有仓库) 7 -第一步:拉取镜像 docker pull registry 8 -第二步:运行容器:docker run -di --name=registry -p 5000:5000 registry 9 -就是一个web服务端--》从浏览器中访问它 10 -第三步:打开浏览器 输入地址http://192.168.241.129:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空 11 -第四步:修改daemon.json 12 vi /etc/docker/daemon.json 13 { 14 15 "insecure-registries":["192.168.241.129:5000"] 16 } 17 18 19 -第五步:重启docker 让配置生效 20 systemctl restart docker 21 docker start registry 22 23 -第六步:把某个镜像tag成私有仓库的镜像 24 docker tag 镜像名字/id 10.0.0.101:5000/django_books:v1 25 docker tag centos_py:latest 192.168.241.129:5000/centos_py:v1 26 27 28 -第七步:提交到私有仓库 29 docker push 192.168.241.129:5000/centos_py:v1 30 31 32 -第八步:其他人,只要配置了私有仓库就可以直接拉取 33 docker pull 192.168.241.129:5000/centos_py:v1 34 35 36 docker run -id --name=centos_py -v /root/project/centos_py:/soft -p 8080:8080 192.168.241.129:5000/centos_py:v1 37 # 以后公司用harbor多---》自己搭建个harbor
或是