2020年docker技术谁主沉浮

作者:京哥 docker技术介绍


1、docker改变了什么?

  • 环境 192.168.29.157
  • 面向产品:产品交互
  • 面向开发:简化环境配置
  • 面向测试:多版本测试
  • 面向运维:环境一致性
  • 面向架构:自动化扩容缩容(微服务)

2、docker的安装

  • 安装yum源
    由于自带 yum 没有 Docker-CE 所以我们需要先增加 docker repo:
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 使用yum安装docker
    查看内核版本 Docker 要求 CentOS 系统的内核版本高于 3.10
    [root@localhost ~]# uname -r
    3.10.0-327.el7.x86_64
    升级内核:yum –y update kernel
    首先安装 Docker 必要依赖包 :
    yum install -y yum-utils device-mapper-persistent-data lvm2
    查看仓库中docker版本
    [root@localhost ~]# yum list docker-ce --showduplicates | sort -r
    [root@localhost ~]# yum install -y docker-ce #安装docker
    验证:
    [root@localhost ~]# echo $?
    0
    [root@localhost ~]# docker -v
    Docker version 19.03.4, build 9013bf583a
  • 启动docker
    [root@localhost ~]# systemctl daemon-reload
    [root@localhost ~]# systemctl restart docker.service
    [root@localhost ~]# systemctl enable docker #开机启动
  • docker公有仓库优化
    因为国内访问 Docker Hub 较慢, 可以使用腾讯云提供的国内镜像源, 加速访问 Docker Hub
    依次执行以下命令
    echo “OPTIONS=’–registry-mirror=https://mirror.ccs.tencentyun.com’” >> /etc/sysconfig/docker
    systemctl daemon-reload
    systemctl restart docker.service
  • docker使用国内的镜像仓库
[root@localhost ~]# vi /etc/docker/daemon.json   
{  
"registry-mirrors": [ "https://registry.docker-cn.com"],"graph":"/data/docker"  
}

下载存放的路径: “graph”:"/data/docker"

  • docker目录信息
    docker控制台日志路径:/var/lib/docker/containers #nginx控制台日志也在此
    镜像加速:
    https://www.daocloud.io/mirror#accelerator-doc

    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

3、docker命令

3.1、查看远程仓库的镜像: docker search centos -s  10 #前10名的    
3.2、下载远程仓库的镜像: docker pull centos  #centos是远程镜像的名字  
3.3、查看本地下载的镜像: docker images  
3.4、保存镜像到本地: docker  save centos > /opt/centos2019.tar.gz     
3.5、删除本地镜像:docker rmi  0f3e07c0138f #0f3e07c0138f是IMAGE ID  多个ID请删除名字:版本
3.6、导入本地镜像包:docker load <  /opt/centos2019.tar.gz  
3.7、启动一个镜像容器:docker run --name mycentos -t -i centos /bin/bash  
3.8、查看镜像运行的容器:docker ps -a  
3.9、退出已进入的容器:exit  
3.10、重启之前的容器:docker start 07d9dc0f9d90  #07d9dc0f9d90 容器的 id  
3.11、进去容器:docker  attach  07d9dc0f9d90 #退出后容器也退出 容器是单进程的  
3.12、获取容器的pid:docker  inspect  --format "{
   
   {.State.Pid}}" 07d9dc0f9d90  
3.13、进入容器:nsenter -t  $pid  -u -i -p  
3.14、停止一个容器:docker  stop  07d9dc0f9d90  
3.15、删除一个容器:docker  rm  07d9dc0f9d90   
3.16、说明:删除一个运行的容器需要加-f 

4、docker网络和存储

  • docker网络
    说明:docker默认使用端口映射来让容器的某一个端口映射对外,一种是随机映射、一种是指定映射
    4.1、ip a #查询有一个nat模式的docker 0网卡
    4.2、随机映射:docker run -d -P --name mytestnginx nginx
    4.3、查看docker运行进程的日志:docker logs 7d1c49bb9d3d # 7d1c49bb9d3d是容器的id
    4.4、指定端口映射:docker run -d -p 88:80 --name mynginx88 nginx
  • docker存储
    说明:Docker提供三种不同的方式将数据从宿主机挂载到容器中:
    volumes,bind mounts和tmpfs
    volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)
    bind mounts:可以存储在宿主机系统的任意位置 (相当于做个软连接)
    tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统(很少用)
    管理卷:
    [root@VM_192_8_centos ~]# docker volume ls #查询已创建的volume
    [root@VM_192_8_centos ~]# docker volume create nginx-vol #创建nginx使用的存储卷
    [root@VM_192_8_centos ~]# docker volume inspect nginx-vol #查询创建的卷的信息
    用卷创建一个容器:
    [root@VM_192_8_centos ~]# docker run -d -it --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
    [root@VM_192_8_centos ~]# docker run -d -it -p 88:80 --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
    进入容器:
[root@VM_192_8_centos _data]#  docker  exec -it nginx-test bash  
root@dbc79dc3099a:/# cd  /usr/share/nginx/html/  
root@dbc79dc3099a:/usr/share/nginx/html# ls  
50x.html  index.html  xiajing.html  
root@dbc79dc3099a:/usr/share/nginx/html# vi  xiajing.html 
bash: vi: command not found  
root@dbc79dc3099a:/usr/share/nginx/html# echo  "2019" > xiajing.html   

docker的存储默认有两种方式1、数据卷2、数据卷容器
4.5、数据卷:docker run -it -v /opt/test:/opt --name mycentos centos
4.6、数据卷容器:

  • 创建数据卷: docker run -d --name mytestcentos -v /data centos
  • 查看容器信息:docker inspect 63e22e4c2b1a #找到monts挂载的物理路径
  • 创建数据卷容器:docker run -it --name mytest1 --volumes-from mytestcentos centos

5、 手工创建镜像

5.1、容器安装nginx
说明:https://mirrors.aliyun.com/epel/ 下载rpm源

[root@localhost ~]# docker run  --name  mynginx  -it  centos  
[root@9bbcb0090fb2 /]# rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm    
Retrieving https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm  
warning: /var/tmp/rpm-tmp.KarnVr: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY  
Verifying...                          ################################# [100%]  
Preparing...                          ################################# [100%]  
Updating / installing...  
   1:epel-release-7-12                ################################# [100%]  
[root@9bbcb0090fb2 /]# yum install -y  nginx   

5.2、创建自己的镜像:

[root@localhost ~]# docker  commit -m "my frist docker" 9bbcb0090fb2  xiajing/mynginx:v1  
sha256:76bfcefe561365d043e0e2caa7465a74a56725e96e03d4dd510791caa56ae36f  
[root@localhost ~]# docker images  
REPOSITORY          TAG                 IMAGE ID            CREATED          SIZE  
nginx               latest              540a289bab6c        Less than a second ago   126MB  
centos              latest              0f3e07c0138f        Less than a second ago   220MB  
xiajing/mynginx     v1                  76bfcefe5613        9 seconds ago            331MB  
[root@localhost ~]#   

启动创建的镜像:docker run -it --name mycentos-nginx xiajing/mynginx:v1
修改容器nginx前台运行:[root@ca5a843f5fc8 /]# vi /etc/nginx/nginx.conf
daemon off;
5.3、再次创建前台运行nginx镜像:

[root@localhost ~]# docker  ps -a  
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                         PORTS                NAMES  
ca5a843f5fc8        xiajing/mynginx:v1   "/bin/bash"              4 minutes ago       Exited (130) 11 seconds ago                         mycentos-nginx  
9bbcb0090fb2        centos               "/bin/bash"              27 minutes ago      Exited (130) 15 minutes ago                         mynginx   
c11596e6d6d9        centos               "/bin/bash"              39 minutes ago      Exited (127) 29 minutes ago                         mydata  
fac7cbcdcdb1        centos               "/bin/bash"              45 minutes ago      Exited (0) 42 minutes ago                           mytestcentos1  
63e22e4c2b1a        centos               "/bin/bash"              53 minutes ago      Exited (0) 53 minutes ago                           mytestcentos  
ba951ffe5a8d        centos               "/bin/bash"              About an hour ago   Exited (0) About an hour ago                        mycentos  
6eaf16f7b61f        nginx                "nginx -g 'daemon of…"   3 hours ago         Up 3 hours                     0.0.0.0:88->80/tcp   mynginx88   
[root@localhost ~]# docker  commit -m "my 2 docker"   ca5a843f5fc8  xiajing/mynginx:v2
sha256:93eb1231cfcd0601ce78abb2b8529370b41a3cebf30fca4df027dfb19f1651d9  
[root@localhost ~]# docker  images  
REPOSITORY          TAG                 IMAGE ID            CREATED                  SIZE  
nginx               latest              540a289bab6c        Less than a second ago   126MB  
centos              latest              0f3e07c0138f        Less than a second ago   220MB  
xiajing/mynginx     v2                  93eb1231cfcd        50 seconds ago           331MB  
xiajing/mynginx     v1                  76bfcefe5613        11 minutes ago           331MB  
[root@localhost ~]# 	   

5.4、启动自己安装的容器:
docker run -d -p 85:80 --name mycentos-nginx2 xiajing/mynginx:v2 nginx # nginx 是命令启动nginx
docker run -d -v /opt/test:/usr/share/nginx/html -p 89:80 --name mycentos-nginx3 xiajing/mynginx:v2 nginx

6、Dockerfile构建镜像

Dockerfile构建步骤:1、基础镜像信息 2、维护者信息 3、镜像操作指令 4、容器启动执行的命令
Dockerfile构建命令:

7、docker运输

参考:https://blog.csdn.net/egworkspace/article/details/80518647

  • 在腾讯云申请免费的证书
    使用自己申请的域名m5c.top申请一个docker.m5c.top的腾讯云ssl证书,不然需要自己使用OpenSSL自己生成,这也是很多博文所提到的做法,不保证成功;

    扫描二维码关注公众号,回复: 12748291 查看本文章
  • 安装配置一个nginx
    安装配置一个nginx,使用代理可以使用用户认证;(nginx可选)
    nginx的http配置:

    upstream docker {  
        zone myapp1 64k;  
        server 127.0.0.1:5000 weight=1 max_fails=3 fail_timeout=30s;   
    
        }  
        server {
                listen 443;
                server_name  docker.m5c.top;
                ssl on;
                ssl_certificate      /usr/local/ssl_nginx/1_docker.m5c.top_bundle.crt;
                ssl_certificate_key  /usr/local/ssl_nginx/2_docker.m5c.top.key;
    
                client_max_body_size 0;
                chunked_transfer_encoding on;             
        location / {
            auth_basic Docker";
            auth_basic_user_file /usr/local/nginx/conf/dockerpasswd;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass https://docker; 
        }  
     }  
    

    认证命令信息:htpasswd -c /usr/local/nginx/conf/dockerpasswd Docker #输入密码
    我们的用户是Docker 密码是 xiajing3673

  • docker下载一个Docker Registry
    命令:docker pull registry:2
    注意:笔者在pull的时候,指定了TAG,即为使用v2版本的registry,对于v1版本的registry,读者大可不必在意了,基本上是淘汰了;
    运行命令:docker run -d -p 5000:5000 -v /usr/local/registry:/var/lib/registry --restart=always --name registry registry:2
    验证,读者可以拉取一个busybox镜像(因为体积小),进行实验:
    docker pull busybox
    拉取最新的busybox镜像后,再给其打标签,准备发布到Registry中:
    docker tag busybox localhost:5000/bosybox:v1.0
    最后再推送给Registry;
    docker push localhost:5000/bosybox:v1.0
    此时,Registry就有了busybox:v1.0镜像了,这时可以不用再去Docker Hub上面拉取了,通过自建的Registry即可
    docker pull localhost:5000/bosybox:v1.0
    如果想查看远程仓库有哪些镜像,可以运行如下命令: curl http://localhost:5000/v2/_catalog
    说明:到此为止,我们已经搭建了一个Docker Registry的“半成品”,说是“半成品”是因为这个Registry只能在本机正常工作,如果在其他主机上试图推送镜像上来,结果是失败的。

  • 基于SSL证书改造Registry
    我的域名docker.m5c.top的ssl腾讯证书已配置到nginx
    在nginx.conf配置文件中,需要注意因为对Registry的访问都是通过REST API完成的,而且是HTTPS的访问协议,所以location节点的配置中,proxy_pass配置的是https://registry,如果配置成http://registry,一旦Docker Registry启用了SSL后,是访问不通的。
    重新启用一个容器:

   docker  run -d -p 5000:5000 -v /usr/local/registry:/var/lib/registry -v /usr/local/ssl_nginx:/ssl_nginx -e REGISTRY_HTTP_TLS_CERTIFICATE=/ssl_nginx/1_docker.m5c.top_bundle.crt  -e REGISTRY_HTTP_TLS_KEY=/ssl_nginx/2_docker.m5c.top.key --restart=always --name registry registry:2  
如果没有安装nginx的读者,可运行这条命令:  
```

docker run -d \
-p 443:443 \
-v /usr/local/registry:/var/lib/registry \
-v /usr/local/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/server.key \
–restart=always \
–name registry \
registry:2

    
	可以浏览器访问:https://docker.m5c.top/v2/_catalog       
	接下来,我们实验一下在另外一台主机,重复上述步骤,依然可以成功;  
* **异常处理**  
服务器时间不一致异常    

[root@localhost ~]# docker login docker.m5c.top
Username: Docker
Password:
Error response from daemon: Get https://docker.m5c.top/v2/: x509: certificate has expired or is not yet valid

此异常时服务器时间不同步导致的;使用 ntpdate cn.pool.ntp.org 同步时间   
* **其它服务器测试**   

[root@localhost ~]# docker login https://docker.m5c.top
[root@localhost ~]# docker tag xiajing/mynginx:v2 docker.m5c.top/mynginx:v1.0
[root@localhost ~]# docker push docker.m5c.top/mynginx:v1.0
The push refers to repository [docker.m5c.top/mynginx]
7ed5b7f8d9f7: Layer already exists
1acb874f057c: Layer already exists
9e607bb861a7: Layer already exists
v1.0: digest: sha256:64bae4b0ef2a7d75b91d613bf8a06c36a8dc9716117676ad559d7f788992b499 size: 949
[root@localhost ~]#
[root@localhost ~]# docker pull docker.m5c.top/mynginx:v1.0
v1.0: Pulling from mynginx
Digest: sha256:64bae4b0ef2a7d75b91d613bf8a06c36a8dc9716117676ad559d7f788992b499
Status: Downloaded newer image for docker.m5c.top/ mynginx:v1.0
docker.m5c.top/mynginx:v1.0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 540a289bab6c 6 days ago 126MB
centos latest 0f3e07c0138f 3 weeks ago 220MB
docker.m5c.top/zhrtcentos latest 0f3e07c0138f 3 weeks ago 220MB
xiajing/mynginx v2 93eb1231cfcd 6 weeks ago 331MB
docker.m5c.top/mynginx v1.0 93eb1231cfcd 6 weeks ago 331MB
xiajing/mynginx v1 76bfcefe5613 6 weeks ago 331MB
[root@localhost ~]#



  






猜你喜欢

转载自blog.csdn.net/qq_31555951/article/details/106758059