0 迁移备份
1 Dockerfile
1.1 dockerfile介绍和常用命令
1.2 小案例
1.3常用和不常用命令
1.4 dockerfile构建一个djagno项目(books图书管理系统)
1.5 乌班图构建redis(跟底层宿主机无关)
2 docker 私有仓库
2.1 镜像传到官方仓库
2.2 镜像分层
2.3 私有仓库搭建
# 镜像从哪来的?
1 docker pull 拉的
2 通过容器打包成镜像
3 Dockerfile构建
# 容器保存为镜像
-运行一个centos容器
docker run -id --name centos_vim centos:7
-在容器中装vim
docker exec -it a6e240 /bin/bash
yum install vim -y
-把容器做成镜像(centos+vim)
docker commit centos centos_vim_image
-把centos_vim 容器删除
docker rm centos_vim
-基于新构建的镜像,运行成容器
docker run -id --name centos_vim centos_vim_image:latest
-进入到容器中,查看,软件都在
docker exec -it id号 /bin/bash
# 本地镜像---推送到远端docker仓库中---》私有仓库
-早期 这个是免费的---》后期好像收费
-给镜像打个tag
docker tag 镜像id 镜像新名字(账号名/镜像名)
-登录到你账号中 docker login 输入账号密码
-docker push 镜像名字
docker push 镜像新名字
-别人就可以下载了
# 镜像备份和恢复
docker save -o centos_vim_image.tar centos_vim_image
-删除容器,删除镜像
-把备份的镜像恢复
docker load -i centos_vim_image.tar
# 镜像从哪里来的?
1 远程仓库拉取的 docker pull (hub.docker---》搭建私有仓库)
2 用容器做成的镜像 docker commit
3 把备份的恢复 docker load
4 使用Dockerfile来构建(这种多)
# 什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本文件,这些命令应用于基础镜像并最终创建一个新的镜像
# centos7中,装了vim,在根路径下新建了一个文件 lin.txt,写了写内容
# Dockerfile的命令
FROM 基础镜像 #基于哪个基础镜像来构建
MAINTAINER lqz # 声明镜像的创建者
ENV key value # 设置环境变量 (可以写多条)
RUN command #是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file #将宿主机的文件复制到镜像内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file # 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR lin # 设置工作目录,运行起这个容器,来到的路径就是这个路径
# 构建一个带vim的centos:7镜像,根路径下有/lin/ss.py
vim Dockerfile
FROM centos:7
MAINTAINER lin
ENV name lin
RUN yum install vim -y
RUN mkdir /lin
RUN touch /lin/ss.py
RUN echo 'print(1)' > /lin/ss.py
COPY ./aa.txt /lin/aa.txt
WORKDIR /lin
# 基于dockerfile构建镜像,不要忘了 . 基于当前路径下的Dockerfile 构建降序
docker build -t='centos_lin_vim' .
docker images
# 基于这个镜像运行容器
docker run -id --name xx centos_lin_vim
# 进入到容器
docker exec -it xx /bin/bash
# 验证vim,和文件夹,文件是否存在
-参考文档:
https://zhuanlan.zhihu.com/p/419175543?utm_id=0
FROM: 指定基础镜像
RUN: 构建镜像过程中需要执行的命令。可以有多条。docker build
CMD:添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改
ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。
MLABELAINTAINER:表明镜像的作者。将被遗弃,被LABEL代替。
EXPOSE:设置对外暴露的端口。
ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效
ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失
ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件
COPY:将本地文件或目录拷贝到镜像的文件系统中。
VOLUME:添加数据卷
USER:指定以哪个用户的名义执行RUN, CMD 和ENTRYPOINT等命令
WORKDIR:设置工作目录
-docker logs 容器名字/id号 查看镜像运行成容器时,错误日志
-CMD ENTRYPOINT
#相同点:
只能写一条,如果写了多条,那么只有最后一条生效。
容器启动时才运行,运行时机相同。
# 不同点:
ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖。
如果我们在Dockerfile中同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,
那么CMD指定的内容将会作为ENTRYPOINT的参数
# 案例Dockerfile
FROM centos:7
ARG age=19 # 一定要等于
RUN echo $age
CMD /bin/bash
# docker build -t='xxxx' .
# 以图书管理系统为例---》公司使用docker流程
# 公司中,使用Docker开发的工作流程
第一步:有一个项目,pycharm开发着,开发完后
第二步:在项目路径下新建Dockerfile,写入
FROM python:3.11
MAINTAINER lin
WORKDIR /soft
COPY ./requirements.txt /soft/requirements.txt
RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple
CMD ["python","manage.py","runserver","0.0.0.0:8080"]
第三步:把代码提交到git
------------------
第四步:上线人员:在上线机器上,把代码啦下来
git clone https://gitee.com/vip-linjun/books.git
第五步:构建镜像
docker build -t='django_books' .
第六步:运行容器
docker run -id --name=books -v /root/lin/books:/soft -p 8080:8080 django_books:latest
第七步:其它人访问宿主机的8080端口就能看到项目了
---------
第八步:开发人员继续提交代码
第九步:运维人员pull代码,重启容器,用户就可以看到最新的了
重启docker容器即可(第三方依赖变了)--》重写构建镜像,运行容器
https://blog.csdn.net/weixin_44145338/article/details/134651783
# 有个远程仓库 ,docker官方提供的 ---》我们可以把我们的镜像传上去
# 公司做的镜像,一般不放在远程仓库,公司会自己搭建私有仓库(把公司制作的镜像传到私有仓库)
# 第0步:在远端创建仓库
# 第一步:给镜像打标签
docker tag books_sys viplinjun/lin_books:v1
# 第二步:登录到远程
docker login
用户名:不是邮箱
密码:挺复杂
# 第三步:提交
docker push viplinjun/lin_books:v1
# 第四步:别人就可以下载了
docker pull viplinjun/lin_books:v1
每一个Dockerfile命令都会构建一层镜像(本质上是每一层都会启动一个容器,执行完命令后,将容器进行提交通过查看下载下来的镜像,发现历史层信息的层ID是missing,其实是因为原本的层id只存在于构建镜像的宿主机上,一旦转移镜像后,历史层消息中将只保留最新一层的ID
# 只要执行一个命令就会多一层
RUN yum install vim -y
RUN yum install git -y
# 查看镜像分层的命令
docker history viplinjun/lin_books:v1
# 好处:
构建快,分发方便,如果本地有某一层了,这一层就不需要下载了
# 补充:Dcokerfile写命令,建议多条命令合为一条---》只会生成一层
RUN python -m pip install --upgrade pip &&\
python -m pip install --upgrade setuptools &&\
pip install -r requirements.txt
# 自己搭建私有仓库
-harbor:企业级私有仓库---》https://blog.csdn.net/Gf19991225/article/details/121982824
-registry:用docker搭建私有仓库
# 搭建步骤:(使用docker搭建docker私有仓库)
-第一步:拉取镜像 docker pull registry
-第二步:运行容器:docker run -di --name=registry -p 5000:5000 registry
-就是一个web服务端--》从浏览器中访问它
-第三步:打开浏览器 输入地址http://10.0.0.157:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
-第四步:修改daemon.json
vi /etc/docker/daemon.json
{
"insecure-registries":["10.0.0.157:5000"]
}
-第五步:重启docker 让配置生效
systemctl restart docker
docker start registry
-第六步:把某个镜像tag成私有仓库的镜像
docker tag 镜像名字/id 10.0.0.157:5000/django_books:v1
docker tag django_books 10.0.0.157:5000/django_books
-第七步:提交到私有仓库
docker push 10.0.0.157:5000/django_books
-第八步:其他人,只要配置了私有仓库就可以直接拉取
docker pull 10.0.0.157:5000/django_books:v1