美文网首页
docker部署安装以及常用操作

docker部署安装以及常用操作

作者: WickJohn | 来源:发表于2019-08-12 14:32 被阅读0次

    Docker与Kvm的对比

    kvm:

    1. 虚拟机

    2. 使用复杂

    3. 启动过程相对慢(分钟)

    4. 模版文件较大

    5. 和物理完全隔离

    6. 模拟的是一个完整系统,可以登录并实现管理

    docker:

    1. 直接虚拟出来一个用户空间

    2. 使用简单

    3. 启动非常块(秒级)

    4. 模版文件很小

    5. 在一定程度上和物理机隔离

    6. 仅仅是模拟一部分用户空间,不方便管理

    docker 底层技术

    "namespaces" . "Union FS" . "Cgroup". "container format"

    docker部署安装

    第一步:需要下载阿里云较新版的docker源文件

    [root@ken-node3 ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    第二步:移动文件到yum.repos.d下

    [root@ken-node3 ~]# mv docker-ce.repo /etc/yum.repos.d/
    

    第三步:下载docker-ce

    docker-ce 社区免费版

    docker-ee 企业收费版

    [root@ken-node3 ~]# yum install docker-ce -y
    

    第四步:直接启动docker并设置开机自启

    [root@ken-node3 ~]# systemctl restart docker
    [root@ken-node3 ~]# systemctl enable docker

    注:

    如果不启动docker服务会报如下的错误:

    [root@ken-node3 ~]# docker image ls
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    

    第五步:验证docker服务是否可以正常运行

    [root@ken1 ~]# docker image ls
    REPOSITORY TAG IMAGE ID CREATED SIZE
    

    镜像加速

    为什么镜像加速?

    因为docker在拉取镜像的时候是默认使用dockerhub上面的镜像即国外镜像,所以拉取速度是很慢的,

    为了解决这个问题,我们就可以使用阿里云镜像加速

    阿里云镜像加速

    第一步:浏览器输入阿里云进入官网并登陆

    第二步:进入控制台–》产品与服务–》容器镜像服务–》镜像加速器

    第三步:创建一个脚本写入如下内容

    一键部署安装docker并加速

    #!/bin/bash
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    mv docker-ce.repo /etc/yum.repos.d
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    docker镜像操作相关的指令

    docker使用技巧:

    [root@ken-node3 ~]# docker –help #可以查看docker所有使用方法

    [root@ken-node3 ~]# docker image –help #可以查看docker镜像操作的所有方法

    [root@ken-node3 ~]# docker image ls –help #可以查看docker镜像操作中ls指令的用法

    镜像操作指令:

    build 从dockerfile中创建镜像

    history 可以显示镜像的构建历史 #docker镜像分层构建,每一层都有一个指令

    import 从一个压缩包创建镜像

    save 创建镜像压缩包

    load 从压缩包导入镜像

    ls 列出来镜像

    prune 清除不使用的镜像

    pull 拉取镜像

    push 推送镜像

    rm 删除镜像

    tag 改名

    docker镜像操作演示

    例子1:拉取镜像

    格式:docker image pull REPOSITORY:TAG

    [root@ken1 ~]# docker image pull busybox
    

    注意:

    如果在拉取镜像的时候只指定了REPOSITORY的话,默认拉取的是tag为latest的版本

    例子2:查看当前有哪些镜像

    [root@ken1 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             1.31.0              db8ee88ad75f        3 weeks ago         1.22MB
    busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB
    

    例子3:查看镜像构建历史

    [root@ken1 ~]# docker image history busybox
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    db8ee88ad75f        3 weeks ago         /bin/sh -c #(nop)  CMD ["sh"]                   0B                  
    <missing>           3 weeks ago         /bin/sh -c #(nop) ADD file:9ceca008111a4ddff…   1.22MB   
    

    例子4:制作镜像压缩包

    方法一:使用-o选项,output

    [root@ken1 ~]# docker image save busybox:1.31.0 -o busybox1.31.tar
    [root@ken1 ~]# ls
    anaconda-ks.cfg  busybox1.31.tar  docker-speend.sh  test  test1
    

    方法二:使用标准输出

    [root@ken1 ~]# docker image save busybox:1.31.0 > busybox1.31-v2.tar
    [root@ken1 ~]# ls
    anaconda-ks.cfg  busybox1.31.tar  busybox1.31-v2.tar  docker-speend.sh  test  test1
    

    例子5:使用镜像压缩包

    方法一:使用-i,input

    [root@ken-node3 ~]# docker image load -i busybox1.31.tar
    Loaded image: busybox:1.31.0
    [root@ken-node3 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             1.31.0              db8ee88ad75f        3 weeks ago         1.22MB
    

    方法二:

    [root@ken-node3 ~]# docker image load <  busybox1.31.tar
    Loaded image: busybox:1.31.0
    [root@ken-node3 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             1.31.0              db8ee88ad75f        3 weeks ago         1.22MB
    

    例子6:删除镜像

    方法一:

    [root@ken1 ~]# docker image rm busybox:1.31.0
    Untagged: busybox:1.31.0
    [root@ken1 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB
    

    方法二:

    [root@ken1 ~]# docker rmi busybox
    

    例子7:镜像改名

    [root@ken1 ~]# docker image tag busybox:1.31.0 busybox:latest
    [root@ken1 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             1.31.0              db8ee88ad75f        3 weeks ago         1.22MB
    busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB
    

    例子8:清除不经常使用的镜像

    [root@ken1 ~]# docker image prune -f
    Total reclaimed space: 0B
    

    docker容器操作详解

    run 运行容器

    commit 使用当前运行的容器制作镜像

    exec 可以在容器中执行命令或者进入容器

    inspect 查看容器的详细信息,也可以查看镜像的信息

    kill 强制杀掉容器

    logs 查看容器产生的日志信息

    ls 查看当前运行的容器

    ps 查看当前运行的容器

    pause 暂停容器

    unpause 开启容器

    port 查 看容器端口映射信息

    rename 对容器改名

    restart 重启容器

    start 启动容器

    stop 停掉容器

    rm 删除容器,默认删除不了正在运行的容器,-f

    stats 查看容器的运行状态

    top 查看容器的系统内存,磁盘使用信息

    例子1:启动容器

    前台运行容器

    [root@ken1 ~]# docker run -i -t busybox /bin/sh
    

    -i 交互模式

    -t分配终端

    后台运行容器

    [root@ken1 ~]# docker run -d nginx-game:v1
    

    -d后台运行

    例子2:查看正在运行的容器

    [root@ken1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
    95a695cffb03        nginx-game:v1       "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:88->80/tcp   hardcore_shannon
    

    查看正在运行以及已经退出的容器

    [root@ken1 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                NAMES
    95a695cffb03        nginx-game:v1       "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes               0.0.0.0:88->80/tcp   hardcore_shannon
    40799b6b38f2        busybox             "/bin/sh"                7 minutes ago       Exited (0) 6 minutes ago                        infallible_benz
    ac864729390b        busybox             "/bin/bash"              7 minutes ago       Created                                         elastic_swartz
    adbc635a8bf1        busybox             "ip a"                   8 minutes ago       Exited (0) 8 minutes ago                        nervous_noyce
    

    例子3:删除一个容器

    方法一:长ID

    [root@ken1 ~]# docker rm 9105c43602d9
    9105c43602d9

    方法二:短ID

    [root@ken1 ~]# docker rm 2c85ff7
    2c85ff7

    方法三:容器名

    [root@ken1 ~]# docker rm youthful_kowalevski
    youthful_kowalevski

    注意:删除镜像一样!

    例子4:后台运行容器

    [root@ken1 ~]# docker run -d nginx-game:v1
    72f712bff84eff8ad0b371291ff488d21f25aca69c2f08a1fd52dd2718d2158c
    [root@ken1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        80/tcp              laughing_lovelace
    

    例子5:运行容器加多个参数

    [root@ken1 ~]# docker run --name nginxtest -d --rm nginx-game:v1
    2cdec372f4350dea46b9fc6ce37d14314a4ef1351f2ec10da662aa36919b6bbe
    [root@ken1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    2cdec372f435        nginx-game:v1       "nginx -g 'daemon of…"   3 seconds ago       Up 2 seconds        80/tcp              nginxtest
    

    –name 指定容器名字

    -d 后台运行

    –rm 容器停掉之后自动删除

    例子6:批量删除容器

    [root@ken1 ~]# docker rm  $(docker ps -aq)
    95a695cffb03
    40799b6b38f2
    ac864729390b
    adbc635a8bf1
    

    注意:

    这样只能删除已经退出的容器,无法删除正在运行的容器

    如果也想要删掉正在运行的容器,可以在docker rm 后加-f选项进行强制删除

    例子7:查看容器信息

    [root@ken1 ~]# docker inspect 72f712bff84e
    

    注:

    查看容器暴露的端口:

    方法一:

    docker history IMAGE_ID
    

    方法二:

    查看容器详细信息 docker inspect CONTAINER_ID

    例子8:查看容器运行状态

    [root@ken1 ~]# docker stats 72f712bff84e
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    72f712bff84e        laughing_lovelace   0.00%               1.344MiB / 1.779GiB   0.07%               648B / 0B           0B / 0B             2
    

    例子9:对容器内存使用量进行限制

    [root@ken1 ~]# docker run -d -m 64M nginx-game:v1
    -m选项指定容器可以使用的内存量

    例子10:停止容器

    [root@ken1 ~]# docker stop 8cd65493c7c1 
    8cd65493c7c1
    [root@ken1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes       80/tcp              laughing_lovelace
    

    例子11:启动容器

    [root@ken1 ~]# docker start 8cd65493c7c1
    8cd65493c7c1
    [root@ken1 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   2 minutes ago       Up 1 second         80/tcp              loving_sammet
    72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes       80/tcp              laughing_lovelace
    

    例子12:杀掉容器

    [root@ken1 ~]# docker kill 8cd65493c7c1
    8cd65493c7c1
    [root@ken1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   16 minutes ago      Up 16 minutes       80/tcp              laughing_lovelace
    [root@ken1 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
    8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   2 minutes ago       Exited (137) 6 seconds ago                       loving_sammet
    72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   16 minutes ago      Up 16 minutes                80/tcp              laughing_lovelace
    

    docker容器操作的kill和stop区别:

    stop优雅退出。-15 10秒之后-9

    kill -9

    例子13:查看容器日志

    [root@ken1 ~]# docker logs 8cd65493c7c1
    

    持续刷新检测日志:

    [root@ken1 ~]# docker logs 8cd65493c7c1 -f
    

    -f 持续刷新

    例子14:容器改名

    [root@ken1 ~]# docker rename loving_sammet nginx-game
    

    例子14:查看容器系统使用信息

    [root@ken1 ~]# docker top nginx-game
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                3054                3036                0                   18:04               ?                   00:00:00            nginx: master process nginx -g daemon off;
    101                 3088                3054                0                   18:04               ?                   00:00:00            nginx: worker process
    

    例子15:暂停容器

    [root@ken1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS               NAMES
    8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   12 minutes ago      Up 9 minutes (Paused)   80/tcp              nginx-game
    

    例子16:再开启容器

    [root@ken1 ~]# docker unpause nginx-game
    nginx-game
    [root@ken1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   13 minutes ago      Up 9 minutes        80/tcp              nginx-game
    

    例子17:查看容器端口映射信息

    [root@ken1 ~]# docker port 8cd65493c7c1 
    

    例子18:进入容器

    [root@ken1 ~]# docker exec -it 8cd65493c7c1  sh
    # 
    # 
    # 
    # exit
    [root@ken1 ~]# docker exec -it 8cd65493c7c1  bash
    root@8cd65493c7c1:/# 
    root@8cd65493c7c1:/# 
    root@8cd65493c7c1:/# 
    

    可以选择使用sh和bash进入容器

    例子19:在容器外执行命令

    [root@ken1 ~]# docker exec -it 95a695cffb03 ls
    bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
    boot  etc  lib   media  opt  root  sbin  sys  usr
    

    注意:

    如果你要想操作容器的话,必须保证容器时up状态即正在运行的状态,exited状态的容器时无法进行操作的。

    总结:进入容器的方式:4种进入容器的方法

    方法一:exec #在容器里面退出,容器本身不会退出

    方法二:attach #容器本身退出 exitd

    方法三:ssh

    方法四:nsenter

    端口映射

    实现了外部环境访问容器内部

    四类端口映射:

    第一类:把容器的端口随机映射为物理机的一个端口
    第二类:把容器的端口映射为物理机特定的一个端口
    第三类:把容器的端口映射为物理机特定网卡上的特定端口
    第四类:把容器的端口映射为物理机特定网卡上的随机端口

    第一类:把容器的端口随机映射为物理机的一个端口

    使用的是大写的-P

    [root@ken1 ~]# docker run -d -P httpd   #随机映射为物理机的端口
    cd662b604a59f6715b28c1af62956dbf665d5c4916897fbeb844e0e77ba8b99e
    [root@ken1 ~]# docker ps    #可以查看到容器映射信息
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
    cd662b604a59        httpd               "httpd-foreground"       12 seconds ago      Up 11 seconds       0.0.0.0:32768->80/tcp   happy_cray
    50405dd6b651        httpd               "httpd-foreground"       6 minutes ago       Up 6 minutes        80/tcp                  busy_ardinghelli
    72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   About an hour ago   Up About an hour    80/tcp                  laughing_lovelace
    [root@ken1 ~]# ss -tnl   #物理机启动会了相应的端口
    State       Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
    LISTEN      0      128                               *:22                                            *:*                  
    LISTEN      0      100                       127.0.0.1:25                                            *:*                  
    LISTEN      0      128                              :::32768                                        :::*                  
    LISTEN      0      128                              :::22                                           :::*                  
    LISTEN      0      100                             ::1:25                                           :::*              
    

    或者

    [root@ken1 ~]# docker port cd662b604a59
    80/tcp -> 0.0.0.0:32768
    

    注意:

    使用-P选线。是把容器内所有expose的端口都映射为物理机的随机端口

    第二类:把容器端口映射为物理机特点端口

    使用的是小写的-p

    [root@ken1 ~]# docker run -d -p 80:80  httpd  #使用小写p进行特定端口映射
    15a01c693f4c4ffc0774bcb535fc5ec415aec9944f295ae9d468915b35019fae
    [root@ken1 ~]# docker port 15a01c693f4c
    80/tcp -> 0.0.0.0:80
    [root@ken1 ~]# ss -tnl
    State       Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
    LISTEN      0      128                               *:22                                            *:*                  
    LISTEN      0      100                       127.0.0.1:25                                            *:*                  
    LISTEN      0      128                              :::32768                                        :::*                  
    LISTEN      0      128                              :::80                                           :::*                  
    LISTEN      0      128                              :::22                                           :::*                  
    LISTEN      0      100                             ::1:25                                           :::*        
    

    – p 80:80 第一个80是 物理机端口,第二个80是容器端口,顺序不能乱!另外物理机的端口不能被占用!

    第三类:把容器端口映射为特点网卡上的随机端口

    使用小写的p

    [root@ken1 ~]# docker run -d -p 192.168.163.151::80 httpd
    ba79a389a467f56c31a0f8489c39a35c756d56bd6a53486d4bee68b3103589bf
    [root@ken1 ~]# docker port ba79a389a467f56c31a0f
    80/tcp -> 192.168.163.151:32769
    

    -p 192.168.163.151::80把容器的80端口随机映射为192.168.163.151上的一个随机端口

    第四类:把容器端口映射为特点网卡上的特点端口

    [root@ken1 ~]# docker run -d -p 192.168.163.151:81:80 httpd
    64ce1f926979f66992a0377fabef5859b45d9466854649b457d741e3020257d6
    [root@ken1 ~]# docker port 64ce1f926979f66
    80/tcp -> 192.168.163.151:81
    [root@ken1 ~]# ss -tnl
    State       Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
    LISTEN      0      128                 192.168.163.151:32769                                         *:*                  
    LISTEN      0      128                 192.168.163.151:81                                            *:*       
    

    -p 192.168.163.151:81:80 把容器80端口映射为192.168.163.151上的81端口

    总结;

    1.在端口映射中使用到了两个选项一个是大写的P,表示把容器暴露的端口随机映射为物理机上的一个随机端口,不能指定特定网卡
    2.另外一个是小写的p,可以把容器暴露的端口映射为物理机特定的端口
    3.或者映射为物理机特定网卡上的随机端口
    4.或者特定网卡上的特定端口

    阿里云镜像仓库

    1,阿里云镜像仓库
    2.dockerhub
    3.registory私有镜像仓库

    使用阿里云镜像仓库

    第一步:注册登录

    第二步:创建镜像仓库

    第三步:命令行登录阿里云

    [root@ken1 ~]# docker login --username=kenkendyg registry.cn-hangzhou.aliyuncs.com
    Password:    #是你注册的阿里云账号密码
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    

    第四步:改名

    [root@ken1 ~]# docker tag nginx-com:v1 registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1
    [root@ken1 ~]# docker image ls
    REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
    nginx-com                                            v1                  5de6e803346c        11 minutes ago      178MB
    registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com   v1                  5de6e803346c        11 minutes ago      178MB
    

    第五步:推送

    [root@ken1 ~]# docker push registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1
    

    第六步:查看

    阿里云镜像版本

    第七步:拉取

    [root@ken-node3 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1
    

    可以进行改名操作

    第一步:首先查看相关镜像

    [root@ken-node3 ~]# docker image ls
    REPOSITORY                                           TAG                 IMAGE ID            CREATED                  SIZE
    nginx-com                                            v1                  5de6e803346c        Less than a second ago   178MB
    registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com   v1                  5de6e803346c        Less than a second ago   178MB
    

    第二步:改名

    [root@ken-node3 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1 nginx-com:v1
    

    第三步:删除相关镜像

    [root@ken-node3 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1
    

    镜像分类:

    1,工具类的镜像(容器)

    2,服务类的镜像(容器)

    工具类镜像比如busybox,centos启动工具类镜像是使用交互模式docker run -it

    服务类镜像比如nginx,redis,httpd启动服务类镜像使用的是docker -d

    docker仓库

    1.阿里云仓库

    2.dockerhub仓库

    3.私有仓库registry

    1.dockerhub需要依赖外网网络,registry无需外网网络

    2.dockerhub是公共仓库,任何人都可以进行拉取,registry私有仓库免费而且安全

    搭建docker私有仓库registry

    小心 latest tag
    千万别被 latest tag 给误导了。latest 其实并没有什么特殊的含义。当没指明镜像 tag 时,Docker 会使用默认值 latest,仅此而已。

    虽然 Docker Hub 上很多 repository 将 latest 作为最新稳定版本的别名,但这只是一种约定,而不是强制规定。

    所以我们在使用镜像时最好还是避免使用 latest,明确指定某个 tag,比如 httpd:2.3,ubuntu:xenial。

    第一步:拉取registry镜像

    [root@ken1 ~]# docker search registry
    [root@ken1 ~]# docker pull registry
    

    第二步:查看registry镜像信息

    [root@ken1 ~]# docker history registry
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    f32a97de94e1        5 months ago        /bin/sh -c #(nop)  CMD ["/etc/docker/registr…   0B                  
    <missing>           5 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["/entrypoint.…   0B                  
    <missing>           5 months ago        /bin/sh -c #(nop) COPY file:507caa54f88c1f38…   155B                
    <missing>           5 months ago        /bin/sh -c #(nop)  EXPOSE 5000                  0B                  
    <missing>           5 months ago        /bin/sh -c #(nop)  VOLUME [/var/lib/registry]   0B                  
    <missing>           5 months ago        /bin/sh -c #(nop) COPY file:4544cc1555469403…   295B                
    <missing>           5 months ago        /bin/sh -c #(nop) COPY file:21256ff7df5369f7…   20.1MB              
    <missing>           5 months ago        /bin/sh -c set -ex     && apk add --no-cache…   1.29MB              
    <missing>           5 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B                  
    <missing>           5 months ago        /bin/sh -c #(nop) ADD file:38bc6b51693b13d84…   4.41MB 
    

    搭建私有仓库需要和保存镜像的数据卷绑定

    registry监听的是5000端口
    打开registry容器

    [root@ken1 ~]# docker run -d -p 5000:5000 -v /tes:/var/lib/registry registry:2
    

    第三步:使用registry

    [root@ken1 ~]# docker tag busybox 192.168.64.8:5000/busbox:v1
    [root@ken1 ~]# docker push 192.168.64.8:5000/busbox:v1
    The push refers to repository [192.168.64.8:5000/busbox]
    Get https://192.168.64.8:5000/v2/: http: server gave HTTP response to HTTPS client
    

    想要使用registry私有仓库,需要首先把镜像名改为host:port/镜像名:tag

    但是现在直接推得话会报上面的错误

    第四步:解决上述错误

    在docker文件添如下一行

    [root@ken1 ~]# cat /etc/docker/daemon.json 
    {
      "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"],
      "insecure-registries":["192.168.64.8:5000"]
    }
    

    ip地址指定的是registry所在的宿主机的IP地址

    5000端口是registry仓库映射到宿主机的端口,建议就映射为特定的5000端口

    第五步:重启docker和容器

    [root@ken1 ~]# systemctl restart docker
    [root@ken1 ~]# docker start d8681dfb9854 
    

    第六步:再次推送

    [root@ken1 ~]# docker push 192.168.64.8:5000/busbox:v1
    

    第七步:查看仓库

    [root@ken1 ~]# ls /test/docker/registry/v2/repositories/busbox/
    

    其他人如何使用私有仓库?

    第一步:也需要添加一行

    "insecure-registries":["192.168.64.8:5000"]
    

    第二步:重启docker

    第三步:拉取镜像

    [root@ken1 ~]# docker pull 192.168.64.8:5000/busbox:v1
    

    总结如何实现共享镜像?

    1.把镜像制作成tar包,然后进行镜像共享
    2.把镜像传到阿里云或者dockerhub仓库进行镜像共享harbor
    3.把镜像传到公司内部私有镜像仓库,实现镜像共享

    docker使用数据库实现数据持久化演示

    第一步:搜索数据库镜像并下载相应的数据库镜像

    [root@localhost ~]# docker search mysql
    

    第二步:启动数据库

    [root@localhost ~]# docker run -d -v /ken:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 --name mysql1 mysql
    

    -e 指定设置环境变量。MYSQL_ROOT_PASSWORD指定数据库登录的初始密码

    第三步:访问数据库

    [root@localhost ~]# docker run -it mysql mysql -uroot -p123 -h172.17.0.2
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.11 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> create database ken;
    Query OK, 1 row affected (0.22 sec)
    

    第四步:销毁容器并验证数据持久化

    [root@localhost ~]# docker run -d -v /ken:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql
    d9655ecf33e7b8f11fb231e9b0a398f61d48268c084ef184e110fced55491364
    [root@localhost ~]# docker exec -it d9655ecf33e7b8f11fb23 bash
    root@d9655ecf33e7:/# mysql
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    root@d9655ecf33e7:/# mysql -uroot -p123
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 9
    Server version: 8.0.11 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | ken                |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.01 sec)
    
    mysql> 
    

    两个容器之间建立连接

    [root@localhost ~]# docker run -it --link flamboyant_gauss:mysql mysql mysql -uroot -p123 -hmysql
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 10
    Server version: 8.0.11 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    --link flamboyant_gauss:mysql
    

    格式:容器名:别名

    本文转载自:http://www.kendd.cn/?p=554

    相关文章

      网友评论

          本文标题:docker部署安装以及常用操作

          本文链接:https://www.haomeiwen.com/subject/rwlyjctx.html