首页 > 其他分享 >docker_03days

docker_03days

时间:2024-03-14 17:45:20浏览次数:31  
标签:容器 centos lqz vim 03days 镜像 docker

迁移备份

# 镜像从哪来的?
    1 docker pull 拉的
    2 通过容器打包成镜像
        -centos镜像运行成容器---》装了vim
        -把装了vim的容器---》打包成镜像
        -以后拿到这个镜像--》再运行成容器,都会带vim命令
        
    3 Dockerfile构建
    


# 容器保存为镜像
    -运行一个centos容器
    docker run -id --name centos_vim centos:centos7
    -在容器中装vim
    docker exec -it a6e240 /bin/bash
    yum install vim -y
    
    -把容器做成镜像(centos+vim)
    docker commit centos_vim centos_vim_image

    -把centos_vim 容器删除
    docker rm centos_vim -f
    -基于新构建的镜像,运行成容器
    docker run -id --name centos_vim centos_vim_image:latest
    -进入到容器中,查看,软件都在
    docker exec -it c3e633bd1 /bin/bash

    
    
    
 
# 本地镜像---推送到远端docker仓库中---》私有仓库(公司内会有私有仓库--》推送上去,给别人用)
    -早期 这个是免费的---》后期好像收费
    
    -给镜像打个tag 
    docker tag 镜像id  镜像新名字(账号名/镜像名)
    -登录到你账号中  docker login  输入账号密码
    
    
    -docker push 镜像名字
        docker push 镜像新名字
    -别人就可以下载了
     
 

代码写好---》做到容器内---》拿到项目镜像 
    项目镜像 v1.1
    项目镜像 v1.2
    项目镜像 v1.3
    项目镜像 v2.1---->运行成容器



    
# 镜像备份和恢复
    docker save -o centos_vim_image.tar centos_vim_image
    -删除容器,删除镜像
    -把备份的镜像恢复
    docker load -i centos_vim_image.tar

Dockerfile(很重要)

 dockerfile介绍和常用命令

# 镜像从哪里来的?
    1 远程仓库拉取的 docker pull   (hub.docker---》搭建私有仓库)
    2 用容器做成的镜像 docker commit 
    3 把备份的恢复 docker load
    4 使用Dockerfile来构建(这种多)
    


    
# 什么是Dockerfile
    Dockerfile是由一系列命令和参数构成的脚本文件,这些命令应用于基础镜像并最终创建一个新的镜像
    
   
    # centos7中,装了vim,在根路径下新建了一个文件 lqz.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 lqz     # 设置工作目录,运行起这个容器,来到的路径就是这个路径
    
    RUN   # 启动并运行容器执行的命令

小案例

# 构建一个带vim的centos:7镜像,根路径下有/lqz/ss.py

vim Dockerfile

FROM centos:centos7
MAINTAINER lqz
ENV name lqz
RUN yum install vim -y
RUN mkdir /lqz
RUN touch /lqz/ss.py
RUN echo 'print(1)' > /lqz/ss.py
COPY ./aa.txt /lqz/aa.txt
WORKDIR /lqz




# 基于dockerfile构建镜像,不要忘了 .   基于当前路径下的Dockerfile 构建镜像
docker build -t='centos_lqz_vim' . 
docker images
# 基于这个镜像运行容器
 docker run -id --name xx centos_lqz_vim
# 进入到容器
docker exec -it xx /bin/bash
# 验证vim,和文件夹,文件是否存在

案例2

FROM centos:centos7
MAINTAINER lqz
ENV name lqz
RUN mkdir /lqz
RUN touch /lqz/ss.py
RUN echo 'input()' > /lqz/ss.py
WORKDIR /lqz
CMD ['python' './ss.py'] # 运行容器时会默认加上 /bin/sh -c




# 基于dockerfile构建镜像,不要忘了 .   基于当前路径下的Dockerfile 构建镜像
docker build -t='centos_py' . 
docker images
# 基于这个镜像运行容器
 docker run -id --name yy centos_py python /lqz/ss.py
# 进入到容器
docker exec -it xx /bin/bash
# 查看环境变量
# python看
os.environ.get('name')
# shell看
echo $name

常用和不常用命令

# 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的参数


# ARG 和 ENV
ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效
ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失

ARG 演示

# 案例Dockerfile

FROM centos:centos7
MAINTAINER lqz
ENV name lqz
ARG age=19
RUN mkdir /lqz
RUN touch /lqz/ss.py
RUN echo 'input()' > /lqz/ss.py
RUN echo $age

WORKDIR /lqz
CMD python ./ss.py

# docker build -t='xxxx' . 

dockerfile构建一个djagno项目(books图书管理系统)

# 以图书管理系统为例---》公司使用docker流程



# 公司中,使用Docker开发的工作流程
第一步:有一个项目,pycharm开发着,开发完后
第二步:在项目路径下新建Dockerfile,写入
FROM python:3.8
MAINTAINER lqz
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/liuqingzheng/books.git
第五步:构建镜像
docker build -t='django_books' .
第六步:运行容器
docker run -id --name=books -v /root/books:/soft -p 8080:8080 django_books:latest
第七步:其它人访问宿主机的8080端口就能看到项目了

---------
第八步:开发人员继续提交代码
第九步:运维人员pull代码,重启容器,用户就可以看到最新的了

重启docker容器即可(第三方依赖变了)--》重写构建镜像,运行容器

docker 私有仓库

# 有个远程仓库 ,docker官方提供的 ---》我们可以把我们的镜像传上去
# 公司做的镜像,一般不放在远程仓库,公司会自己搭建私有仓库(把公司制作的镜像传到私有仓库)

镜像传到官方仓库

# 第0步:在远端创建仓库
# 第一步:给镜像打标签
	docker tag 086e6b3e71c0 liuqingzheng/lqz_books:v1
# 第二步:登录到远程
	docker login
    用户名:不是邮箱
    密码:挺复杂
    
# 第三步:提交
	docker push liuqingzheng/lqz_books:v1
        
# 第四步:别人就可以下载了
	docker pull liuqingzheng/lqz_books:v1

镜像分层

每一个Dockerfile命令都会构建一层镜像(本质上是每一层都会启动一个容器,执行完命令后,将容器进行提交,通过查看下载下来的镜像,发现历史层信息的层ID是missing,其实是因为原本的层id只存在于构建镜像的宿主机上,一旦转移镜像后,历史层消息中将只保留最新一层的ID


# 只要执行一个命令就会多一层
RUN yum install vim -y
RUN yum install git -y


# 查看镜像分层的命令
docker history  liuqingzheng/lqz_books:v1
# 好处:
构建快,分发方便,如果本地有某一层了,这一层就不需要下载了


# 补充:Dcokerfile写命令,建议多条命令合为一条---》只会生成一层
RUN python -m pip install --upgrade pip &&\
python -m pip install --upgrade setuptools &&\
pip install -r requirements.txt

私有仓库搭建

# 自己搭建私有仓库
    -harbor:企业级私有仓库---》(有图形化界面--》跟hub.docker 很像)https://blog.csdn.net/weixin_47085247/article/details/129237979
    
 
    
    -registry:用docker搭建私有仓库(没有图形化界面)
    
# 搭建步骤:(使用docker搭建docker私有仓库)
    -第一步:拉取镜像 docker pull registry
    -第二步:运行容器:docker run -di --name=registry -p 5000:5000 registry
        -就是一个web服务端--》从浏览器中访问它
    -第三步:打开浏览器 输入地址http://10.0.0.110:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
    -第四步:修改daemon.json
    vi /etc/docker/daemon.json
    {
       
        "insecure-registries":["10.0.0.110:5000"]
    } 
    
    
    
    
    -第五步:重启docker 让配置生效
    systemctl restart docker
    docker start registry
    
    -第六步:把某个镜像tag成私有仓库的镜像
    docker tag 镜像名字/id 10.0.0.110:5000/django_books:v1
    
    docker tag nginx:latest 10.0.0.110:5000/my_nginx:v1
    
            
    -第七步:提交到私有仓库
    docker push 10.0.0.110:5000/my_nginx:v1
            
            
    -第八步:其他人,只要配置了私有仓库就可以直接拉取
    docker pull 10.0.0.110:5000/my_nginx:v1
    
    
    
    # 以后公司用harbor多---》自己搭建个harbor

 

  

 

标签:容器,centos,lqz,vim,03days,镜像,docker
From: https://www.cnblogs.com/wzh366/p/18073560

相关文章

  • docker基础知识
    Docker容器基础介绍和操作-清白之年980410-博客园<linkrel="stylesheet"href="/css/blog-common.min.css?v=g-c5Yfdgh3oAoyQibjhmJ6ylVcBcMRHNIG6JkF70hpY"/><linkid="MainCss"rel="stylesheet"href="/skins/mountainink......
  • Linux下安装Docker
    Ubuntu安装Docker环境Ubuntu安装Docker环境的方法,在Linux服务器上运行docker用于开发测试通过Ubuntu自带的apt存储库在安装Docker引擎首次在新主机运行之前,需要更新Dockder存储库,然后你在存储库安装或更新Docker更新Dockerapt存储库sudoapt-getupdatesudoapt-......
  • 使用docker搭建kasm desktop
    Kasm是一种基于Docker的解决方案,它可以提供Web应用程序和桌面环境的即时访问。使用Kasm,你可以通过Web浏览器在任何设备上安全地访问应用程序和桌面环境。下面将详细介绍如何使用DockerCLI和DockerCompose两种方式搭建KasmDesktop,并解释每个参数的作用。使用DockerCLI搭......
  • 使用docker搭建mongodb
    使用DockerCLI搭建MongoDB1.运行MongoDB容器首先,我们使用以下命令来启动一个MongoDB容器:dockerrun-itd--namemongodb_comm-v$PWD/data:/data/db-p27017:27017mongo:4.4--auth参数解释:-itd:这三个参数通常一起使用,i表示交互式模式,t分配一个伪......
  • linux使用docker安装nexus
    nexus安装命令 拉取镜像dockerpulldocker.io/sonatype/nexus3修改目录权限chown-R200/data/maven-data/使用docker启动,挂载本地目录卷dockerrun-tid-p9081:8081--restart=always--namenexus-eNEXUS_CONTEXT=nexus-v/data/maven-data/:/nexus-datadoc......
  • oracle linux 9安装docker失败
    报错信息如下[root@CHEN~]#dockerrun-p3307:3306--namemysql8.0-eMYSQL_ROOT_PASSWORD=root-dmysql:8.0EmulateDockerCLIusingpodman.Create/etc/containers/nodockertoquietmsg.Error:netavark:unabletoappendrule'-d10.88.0.0/16-jACCEPT�......
  • docker实战(1)
    docker搭建mysql一,搭建docker环境二,Docker安装mysql1,查看mysql版本:dockersearchmysql2,安装指定mysql版本或安装最新版本dockerpullmysql:5.8或dockerpullmysql:latest3,查看本地镜像中是否已安装好mysql镜像:dockerimages4,运行容器启动mysql服务dockerrun-itd......
  • docker的使用方法
    一、docker安装Docker官方文档|DockerDocumentation1.自动安装wgethttp://fishros.com/install-Ofishros&&sudobashfishros2.手动安装2.1.ubuntu安装1.系统需求UbuntuJammy22.04(LTS)UbuntuImpish21.10UbuntuFocal20.04(LTS)UbuntuBionic18.04......
  • 从零开始写 Docker(六)---实现 mydocker run -v 支持数据卷挂载
    本文为从零开始写Docker系列第六篇,实现类似docker-v的功能,通过挂载数据卷将容器中部分数据持久化到宿主机。完整代码见:https://github.com/lixd/mydocker欢迎Star推荐阅读以下文章对docker基本实现有一个大致认识:核心原理:深入理解Docker核心原理:Namespace、Cgr......
  • 使用 docker-easyconnect
    使用docker-easyconnectdocker-easyconnect是EasyConnect和aTrust运行在docker中的版本使用非常简单解决如下问题:1解决了软件对物理机的更改以及监控2可以在linux服务器上部署了注意:该项目为第三方开源非官方提供一行docker命令启动dockerrun--rm--device/de......