zoukankan      html  css  js  c++  java
  • linux学习-DAY4-Docker

    Docker

    Docker 的优点

    • 提供简单轻量的建模方式
    • 职责的逻辑分离
    • 快速高效的生命周期
    • 鼓励使用面向服务的架构

    Docker 的组成

    • Docker C/S结构

      ​ Docker是C/S(客户端client-服务器server)架构模式。
      docker通过客户端连接守护进程,通过命令向守护进程发出请求,守护进程通过一系列的操作返回结果。
      docker客户端可以连接本地或者远程的守护进程。

    • Docker Image镜像

      ​ 镜像是容器的基石,容器基于镜像启动和运行。镜像就好像容器的源代码,保存了容器各种启动的条件。镜像是一个层叠的只读文件系统。

    • Docker container容器

      ​ 容器通过镜像来启动,容器是docker的执行来源,可以执行一个或多个进程。镜像相当于构建和打包阶段,容器相当于启动和执行阶段。容器启动时,Docker容器可以运行、开始、停止、移动和删除。每一个Docker容器都是独立和安全的应用平台。

      ​ 要注意的是,由于容器是基于镜像的,所以不管对容器怎样的操作,一旦容器重启,一切都会变成最开始的样子。

    • Docker registry 仓库

      ​ docker仓库用来保存镜像。docker仓库分为公有和私有。docker公司提供公有仓库docker hub,网址:https://hub.docker.com/。我们也可以创建自己私有的仓库。

    一、安装

    # 1.配置源
    curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
        
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
        
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    
    # 2.下载docker
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum list docker-ce.x86_64 --showduplicates | sort -r
    yum install -y --setopt=obsoletes=0 
    docker-ce-17.03.2.ce-1.el7.centos.x86_64 
    docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
    
    # 3.启动docker
    systemctl daemon-reload
    systemctl restart docker
    systemctl enable docker
    
    # 优化镜像的安装
    mkdir -p /etc/docker
    
    tee /etc/docker/daemon.json <<-'EOF'
    {
       "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
    }
    EOF	  
    

    二、镜像

    1.基本使用

    # 1.获取镜像
    	# 查询远程仓库中的centos
    	docker search centos
        
        # 下载镜像(服务、系统)
    	docker pull centos:6.9
    	docker pull centos:7.5.1804
    	docker pull nginx
        
    # 2.查询镜像
    	# 查询拥有的镜像
    	docker images
        # 显示所拥有的镜像的ID
    	docker images -q 
        # 通过镜像ID或者镜像名加标签查询镜像,并显示详细信息
    	docker inspect ID/name:tag
            
    # 3.删除镜像
    	# 根据ID删除镜像
    	docker rmi  ID 
        # 查询所有镜像ID并删除
    	docker rmi `docker images -q`
    	docker rmi $(docker images -q)
    	
    # 4.导入导出镜像
    	# 导出
    	docker image save nginx >/opt/nginx.tar.gz
        # 导入
    	docker image load -i /opt/nginx.tar.gz
    	
    # 5.启动容器并获取镜像
    	docker  run -d -p 80:80 httpd
        docker  run -it --name "test" centos:6.9
        # -d: 后台运行容器,并返回容器ID;
        # -p: 端口映射,格式为:主机(宿主)端口:容器端口;
        # -i: 以交互模式运行容器,通常与 -t 同时使用;
        # -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
        # --name="nginx-lb": 为容器指定一个名称;
        # httpd/centos6.9:可以根据镜像名或镜像ID来启动镜像
    

    2.制作镜像

    语法

    docker commit xxxxxx oldguo/wordpress:v1
    # xxxxxx:拥有的镜像名/镜像ID
    # oldguo/wordpress:制作的镜像名
    # v1:制作的镜像标签
    
    # 为何要制作镜像
    # 比如我对centos7.5添加了一些软件,然后不想每次都启动原始的centos7.5,都要再添加一次软件,所以,可以把添加软件后的centos7.5制作成一个镜像,然后启动这个镜像就行
    

    制作镜像: centos7.5+vim+net-tools+iproute+sshd

    # 1.启动新容器
    docker run -it --name "centos7.5" 76d6bc25b8a5
    
    # 2.优化yum源
    mv /etc/yum.repos.d/*.repo /tmpecho -e "[ftp]
    name=ftp
    baseurl=ftp://10.0.0.100/pub/centos7
    gpgcheck=0">/etc/yum.repos.d/ftp.repo
    
    # 3. 安装必须软件包
    yum install -y vim net-tools iproute openssh-*   -y
    
    # 4.启动SSHD
    mkdir /var/run/sshd
    echo 'UseDNS no' >> /etc/ssh/sshd_config
    sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
    echo 'root:123456' | chpasswd
    # 分配公钥
    /usr/bin/ssh-keygen -A
    /usr/sbin/sshd -D 
     
     
     # 注意: 以上操作做完之后,会一直不退出,需要用以下命令退回到宿主机,并不关闭容器   ctrl+p+q
    
    # 5.制作镜像,以便日后使用
    docker commit centos7.5 oldguo/centos7_sshd:v2
    

    3.dockerfile

    # dockerfile 可以快速创建一个镜像
    # 我们就使用dockerfile来快速创建一个centos7.5+vim+net-tools+iproute+sshd的镜像
    
    # 1.创建一个dockerfile文件
    vim  dockerfile 
    # 2.输入内容
    FROM centos:7.5.1804
    RUN mv /etc/yum.repos.d/*.repo /tmp
    RUN echo -e "[ftp]
    name=ftp
    baseurl=ftp://10.0.0.100/pub/centos7
    gpgcheck=0">/etc/yum.repos.d/ftp.repo
    RUN yum install -y openssh-server
    RUN yum install -y openssh-clients
    RUN yum install net-tools* -y
    RUN yum install iproute-* -y
    RUN mkdir /var/run/sshd
    RUN echo 'UseDNS no' >> /etc/ssh/sshd_config
    RUN sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
    RUN echo 'root:123456' | chpasswd
    RUN /usr/bin/ssh-keygen -A
    EXPOSE 22
    CMD ["/usr/sbin/sshd", "-D"]
    
    # 3.执行dockerfile文件
    docker build -t "oldguo/centos7_sshd:v3" /opt/dockerfile
    
    # docker build 命令用于使用 Dockerfile 创建镜像。
    # 使用时要指定dockerfile文件所在的目录,若不指定,就会从当前目录里找
    

    三、容器

    1.容器的类型

    按用途容器大致可以分为两类:服务类容器和工具类容器

    # 1. 服务类容器以daemon的形式运行,对外提供服务。比如web server,数据库等。通过-d参数以守护方式启动这类容器非常合适。如果需要排查问题,可以通过exec -it进入容器
    	# 工具类:vim
    	docker run -it --name="test_vim"  3fe2fe0dab2e /bin/bash
    
    # 2. 工具类容器通常给我们提供一个临时的工作环境,通常以run -it方式运行
    	# 服务类:nginx 
        # -d:后台运行
    	docker run -d -p 8080:80 --name="discuz" nginx:1.14
    

    2.容器的多类启动方式

    ①启动进入容器指定bash 退出后容器关闭

    docker  run -it --name "test" centos:7.5.1804 /bin/bash
    # 1.使用-it+/bin/bash执行后,会在容器后台启动一个bash进程,显示该容器的终端
    # /bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出
    
    # 2.使用/bin/bash启动镜像的时候如果没有带参数 -it的话,容器会直接退出
    
    # 3.使用-it执行后,容器重新分配一个伪输入终端,容器不会立即退出,直到exit容器才关闭
    
    # 注:
    # 针对于工具类的容器,由于是一次性使用的,一旦exit容器,容器就自动关闭。
    # 对于想要退出后还可以在后台执行的,比如服务类,可以使用Ctrl+p+q。
    

    ②docker attach进入容器

    # 如果容器没有指定bash环境会停留在空白页面 退出后容器也会正常退出(进入容器后其他人进入容器可以看到你输入的信息
    
    docker  attach  test
    
    # attach进入的容器应当是已经启动的容器,当有多台主机通过attach进入同一台容器时,所有的操作都是多台主机同时可见的,当退出时也是同时退出
    # 也可以理解为,attach是对一台容器开了多个终端操作,当其中一台终端操作时,会反映到所有的终端上
    

    ③docker exec 进入容器 会启用一个bash环境

    # exec也是进入一个已经开启的容器中,但是会新启用一个bash环境,不会像attach一样同步到每个终端
    docker exec -it test /bin/bash
    
    

    3.容器的常用管理命令

    # 查看容器
    # -a:显示所有的容器,包括未运行的。
    # -q:只显示容器编号
    # -l:显示最近创建的容器。
    docker ps -a  -q -l
    # 查看容器中运行的进程信息
    docker top nginx
    
    
    # 删除一个或多少容器
    # -f:通过SIGKILL信号强制删除一个运行中的容器
    # -l:移除容器间的网络连接,而非容器本身
    # -v:删除与容器关联的卷
    docker rm 容器ID|容器名称
    # 批量删除已关闭
    docker rm -v $(docker ps -aq -f status=exited)
    # 批量强制删除所有
    docker rm -f `docker ps -a –q`
    	
    # 获取容器/镜像的元数据,包括IP等
    docker inspect nginx
    
    # 连接到正在运行中的容器。
    docker attach 容器ID|容器名称(工具类)配合ctrl+p+q
    docker exec  -i -t  容器ID|容器名称 /bin/bash(服务类),一般是做服务类容器调试用
    
    # 停止一个运行中的容器
    docker stop 容器ID|容器名称
           
    # 杀掉一个运行中的容器。
    docker kill 容器ID|容器名称
          
    # 启动一个或多个已经被停止的容器          
    docker  start 容器ID|容器名称
     
    # 重启容器
    docker  restart 容器ID|容器名称
    

    四、数据卷(持久化)

    在Docker的使用过程中往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,所以这就涉及到Docker容器的数据操作。 容器中数据管理主要有两种方式:

    数据卷和数据卷容器

    • 数据卷(Data Volumes) 容器内数据直接映射到本地宿主机。
    • 数据卷容器(Data Volume Containers) 使用特定容器维护数据卷

    1.使用

    # 启动时指定:
    docker run -it --name="centosv1" -v /opt/datavolumns:/data centos  /bin/bash
    # Dockerfile中指定
    VOLUMES [“/data”]
    docker inspect centosv1
    
    

    2.数据卷数据的备份及恢复

    # 备份
    docker run --volumes-from  centosv1 --name “centosvbak“ --rm  -v /backup:/backup:rw  centos   tar cvf /backup/data.tar /data 
    
    # 恢复      
    docker run --volumes-from  centosv1 --name "centosrestore" --rm  -v /backup:/backup:rw  centos   tar xvf  /backup/data.tar
    
    

    五、仓库

    1.配置私有仓库

    # 1.
    docker run -d -p 5000:5000 --restart=always --name registry -v /opt/Registry:/var/lib/registry  registry
    
    # 2.配置
    vim /etc/docker/daemon.json
    
    {
       "registry-mirrors": 				["https://68rmyzg7.mirror.aliyuncs.com"],
       "insecure-registries": ["10.0.0.100:5000"]
    }
    
    # 3.重启docker
    systemctl  restart docker
    

    2.使用本地镜像

    # 配置好私有仓库,我们就可以把制作好的镜像放到本地的私有仓库,方便下载使用
    
    # 1.制作本地镜像并push到私有仓库
    # 为本地镜像nginx打上标签
    # IP地址加上私有仓库的端口号(10.0.0.100:5000/)是必须的,后面的名字就随意了
    docker tag nginx 10.0.0.100:5000/oldguo/nginx:v1
    docker push 10.0.0.100:5000/oldguo/nginx:v1
            
    # 2.异地进行pull镜像,从本地的私有仓库下载镜像
    docker pull  10.0.0.100:5000/oldguo/nginx:v1	
    
  • 相关阅读:
    [Docker][ansible-playbook]3 持续集成环境之分布式部署
    [Jenkins][GitHub]2 持续集成环境初探
    [Jenkins][centos]1 持续集成 之 配置VNC,部署Jenkins
    [AWS][GUI][VNC]rhel 7 安装GUI ,配置VNC
    [Git]checkout 指定版本
    [Golang][Mac]Go 语言学习资料记录
    App测试札记
    摘记:代码检查错误列表
    摘记:Web应用系统测试内容
    摘记:LoadRunner
  • 原文地址:https://www.cnblogs.com/xvchengqi/p/10241184.html
Copyright © 2011-2022 走看看