美文网首页Docker 微服务
[Docker] Docker 之 CentOS 环境安装

[Docker] Docker 之 CentOS 环境安装

作者: 离兮丶斜阳 | 来源:发表于2018-07-10 08:34 被阅读2次

    Docker 之 CentOS 环境安装

    版本信息

    • docker -v

        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker -v
        Docker version 18.05.0-ce, build f150324
      
    • uname -a

        [root@f7106025b994 /]# uname -a
        Linux f7106025b994 4.9.93-linuxkit-aufs #1 SMP Wed Jun 6 16:55:56 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
      
    • 本地磁盘挂载(资源文件共享)

      docker run -i -t -v ~/software:/mnt/software centos /bin/bash
      
      xiazhaoyangdeMacBook-Pro:/ xiazhaoyang$ cd ~/software
      xiazhaoyangdeMacBook-Pro:software xiazhaoyang$ ls
      jdk-8u172-linux-x64.tar.gz
      xiazhaoyangdeMacBook-Pro:software xiazhaoyang$ pwd
      /Users/xiazhaoyang/software
      
    • centos软件安装目录 /opt

    安装jdk

    解压

     tar -zxvf /mnt/software/jdk-8u172-linux-x64.tar.gz  -C /opt
    

    创建映射

     ln -s /opt/jdk1.8.0_172 /opt/jdk
    
    # 测试映射路径
    ll /opt/jdk
    /opt/jdk/bin/java -version
    

    修改环境变量

     vi /etc/profile
    
    # JAVA_ENV_CONFIGURATION
    export JAVA_HOME=/opt/jdk              
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
    export PATH=${JAVA_HOME}/bin:$PATH
    

    激活配置并测试

    source /etc/profile

    [root@7941a20a85b6 opt]# java -version
    java version "1.8.0_172"
    Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
    

    镜像操作

    镜像上传

    # 将本地容器提交为镜像
    xiazhaoyangdeMacBook-Pro:software xiazhaoyang$ docker commit 7941a20a85b6 xiachaoyang/centos-java
    sha256:905af87b4a5efcd0d7c5128700393d65f50c4575878cb250fae177c987d87964
    xiazhaoyangdeMacBook-Pro:software xiazhaoyang$ docker images
    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
    xiachaoyang/centos-java   latest              905af87b4a5e        18 seconds ago      587MB
    centos                    latest              49f7960eb7e4        2 weeks ago         200MB
    xiazhaoyangdeMacBook-Pro:software xiazhaoyang$
    

    镜像验证

        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker images
        REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
        xiachaoyang/centos-java   latest              905af87b4a5e        10 minutes ago      587MB
        centos                    latest              49f7960eb7e4        2 weeks ago         200MB
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker run --rm xiachaoyang/centos-java /opt/jdk/bin/java -version
        java version "1.8.0_172"
        Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
        Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$
    
    

    <font color=red>[备注]</font>

    1.  容器通过commit直接生成的镜像使用`docker run -i -t xiachaoyang/centos-java`启动镜像后,需要再次执行source /etc/profile 才能激活环境变量
    
        [root@288652cb51f3 /]# java -version
        bash: java: command not found
        [root@288652cb51f3 /]# source /etc/profile
        [root@288652cb51f3 /]# java -version
        java version "1.8.0_172"
        Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
        Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
        [root@288652cb51f3 /]#
    

    推荐使用Dockerfile创建镜像

    2.  启动镜像后可以多终端访问同一运行中容器
    
        # 启动一个实例
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker run -i -t xiachaoyang/centos-java /bin/bash
        [root@288652cb51f3 /]#
    
        # 开启新终端查询实例ID并进入
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker ps
        CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS               NAMES
        288652cb51f3        xiachaoyang/centos-java   "/bin/bash"         2 minutes ago       Up About a minute                       nifty_bhabha
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker attach 288652cb51f3
        [root@288652cb51f3 /]#
    
        # 测试运行中实例是否有变化
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker ps
        CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS               NAMES
        288652cb51f3        xiachaoyang/centos-java   "/bin/bash"         2 minutes ago       Up 2 minutes                            nifty_bhabha
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$
    
    3.  多个终端链接同一镜像,退出后整体退出。
    所有操作都是并行的,A输入cmd1,B也同样出现cmd1
    
    输入图片说明
    4.  基于centos进行的镜像操作,本地centos是否会发生变化,能否提交覆盖
    
    不能,推送类似于git操作,需要权限。
    
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker push centos
        The push refers to repository [docker.io/library/centos]
        bcc97fbfc9e1: Layer already exists
        errors:
        denied: requested access to the resource is denied
        unauthorized: authentication required
    
    5.  对于本地库中镜像的操作(运行容器并修改部分东西),能否覆盖提交,能否提交到仓库同名下,还是说需要利用tag进行标记?
    

    可以覆盖更新镜像,参考下文:

    创建本地镜像(commit、Dockerfile)

    6.  同一镜像生成的不同ID的容器,互相之间不受影响,修改在退出后也不会保存
    

    镜像推送

    Docker Hub

    • 创建DockerHub账号

    • 创建仓库

    • 推送本地镜像

      非必须,没有权限时需要登录

      docker login

      推送

      docker push xiachaoyang/env-jdk

        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker images
        REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
        xiachaoyang/env-jdk   latest              abe21e6640f3        13 hours ago        587MB
        centos                latest              49f7960eb7e4        2 weeks ago         200MB
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker push xiachaoyang/env-jdk
        The push refers to repository [docker.io/xiachaoyang/env-jdk]
        f65468761332: Pushed
        5ed6bb2dd837: Pushed
        bcc97fbfc9e1: Mounted from library/centos
        latest: digest: sha256:a7f0324eae38d9ce41389bccd43c92f3fa9d8a1a1dbe5ff52d6be978815fb267 size: 949
    
    • 搜索镜像

      docker search xiaochaoyang/env-jdk

      Docker Hub会定时对已上传的镜像仓库进行索引,随后可通过docker search xiachaoyang/centos-java进行搜索自己推送到Docker Hub的镜像仓库

    镜像功能测试

        # 查询运行中容器
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker ps
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker run -i -t xiachaoyang/centos-java /bin/bash
        [root@288652cb51f3 /]#
    

    Dockerfile 创建镜像

        xiazhaoyangdeMacBook-Pro:Dockerfile         jdk-8u172-linux-x64.tar.gz
        xiazhaoyangdeMacBook-Pro:jdk-8u172-linux-x64 xiazhaoyang$ docker build -t xiachaoyang/centos-java .
        Sending build context to Docker daemon  190.9MB
        Step 1/7 : FROM centos:latest
        ---> 49f7960eb7e4
        Step 2/7 : MAINTAINER  "xiachaoyang"<xiazhaoyang@live.com>
        ---> Using cache
        ---> c1009b593364
        Step 3/7 : ADD jdk-8u172-linux-x64.tar.gz /opt
        ---> Using cache
        ---> 9c32f5eacb71
        Step 4/7 : RUN ln -s /opt/jdk-8u172-linux-x64 /opt/jdk
        ---> Running in 23a59c89c7be
        Removing intermediate container 23a59c89c7be
        ---> 99b3d5d9446c
        Step 5/7 : ENV JAVA_HOME /opt/jdk
        ---> Running in f70d6dd4dda2
        Removing intermediate container f70d6dd4dda2
        ---> 685cd05aa266
        Step 6/7 : ENV PATH $JAVA_HOME/bin:$PATH
        ---> Running in 934a8279744d
        Removing intermediate container 934a8279744d
        ---> 75f551548c7a
        Step 7/7 : CMD java -version
        ---> Running in 9ff68222bc64
        Removing intermediate container 9ff68222bc64
        ---> f1992f5f7b4c
        Successfully built f1992f5f7b4c
        Successfully tagged xiachaoyang/centos-java:latest
    

    标记版本信息

        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker images
        REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
        xiachaoyang/centos-java   latest              f1992f5f7b4c        2 minutes ago       587MB
        xiachaoyang/centos-java   <none>              905af87b4a5e        10 hours ago        587MB
        centos                    latest              49f7960eb7e4        2 weeks ago         200MB
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker tag 905af87b4a5e xiachaoyang/centos-java:1.0
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker images
        REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
        xiachaoyang/centos-java   latest              f1992f5f7b4c        3 minutes ago       587MB
        xiachaoyang/centos-java   1.0                 905af87b4a5e        10 hours ago        587MB
        centos                    latest              49f7960eb7e4        2 weeks ago         200MB
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$
    
    

    提交(运行中容器提交为镜像)

    查看运行中容器

    docker ps
    

    将当前容器提交为一个新的镜像

    docker commit [容器ID] xaichaoyang/centos-java
    

    查看镜像

    docker images
    

    镜像删除

    • 容器删除

      dokcer rm [容器ID]

    • 容器批量删除

      -f表示强制删除

       docker rm -f $(docker ps -a -q)
       docker rm -f `docker ps -a -q`
      
    • 镜像删除

      docker rmi [镜像ID]
      
    • 批量删除

          docker rmi -f  `docker images -a -q`
      

      Dockerfile 踩坑

    • 解压文件名

      jdk文件解压文件名非原tgz的文件名,导致ln命令的符号链接显示红色闪烁,是由于文件不存在导致,调整Dockerfile构建文件后可以正常生成

        # 运行镜像测试
        xiazhaoyangdeMacBook-Pro:jdk-8u172-linux-x64 xiazhaoyang$ docker run --rm xiachaoyang/env-jdk java -version
        java version "1.8.0_172"
        Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
        Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
    

    查看容器列表信息

    docker container ls -a

    • 批量删除

      docker rm -f docker ps -a -q

    搭建Docker Registry(本地镜像仓库)

    • 本地搭建

      下载并运行registry

      docker run -d -p 5000:5000 -v ~/docker-registry:/tmp/registry --name local-docker-res --restart=always registry

      -d : 表示后台启动该容器
      -p : 表示对容器中应用程序暴露的端口号进行端口映射,冒号左边的端口(50000)为宿主机的端口,冒号右边的端口(5000)为容器内部需要报录的端口
      -v : 数据卷选项,表示将宿主机的~/docker-registry 目录映射为容器的/tmp/registry
      -restart:docker服务重启后总是重启此容器

        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker run -d -p 50000:5000 -v ~/docker-registry:/tmp/registry --name local_res registry
        5c08afe92712746db4fb48e02b5b274e205e7dce3cb38395846ca57b5d387c5e
        xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker ps
        CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
        5c08afe92712        registry            "/entrypoint.sh /etc…"   27 seconds ago      Up 26 seconds       0.0.0.0:50000->5000/tcp   determined_banach
    

    访问http://127.0.0.1:5000/v2/_catalog?n=100查看仓库

    输入图片说明
    > 下载web服务
    docker run -it -p 8000:8080 --restart=always --name local-docker-res-web --link local-docker-res  -e REGISTRY_URL=http://local-docker-res:5000/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web
    
    `8000:8080` 内置web服务是8080端口的,将内部8080端口映射到本机的8000端口上。
    `REGISTRY_URL` 修改本地仓库域名
    > 运行时遇到的问题
    1. 8000:8000,内部8080启动失败:
    
    - 查看运行中容器
    docker ps
    - 关闭容器
    docker stop [容器ID]
    - 容器搜索
    docker container ls -a
    - 删除容器
    docker rm [容器ID]
    - 再次运行web服务
    
    2. 仓库名称写错
    `I/O error on GET request for "http://registry-srv:5000/v2/_catalog?n=100":registry-srv; nested exception is java.net.UnknownHostException: registry-srv`
    参考网上资料修改时未换成本地自定义仓库名local-docker-res
    修改命令重新执行
    
    
    - 操作时对于容器的状态还原
    
    批量关闭容器
    docker stop `docker ps -a -q`
    
    批量删除容器
    docker rm -f `docker ps -a -q`
    
    删除镜像  
    docker rmi -f [镜像ID]
    

    本地仓库web服务

    • 界面效果

      访问http://127.0.0.1:8000/查看仓库web界面

    输入图片说明
    • 测试本地仓库推送

    可能出现的push失败

    $ docker push 127.0.0.1:5000/xiachaoyang/env-jdk
    The push refers to a repository [127.0.0.1:5000/xiachoayang/env-jdk]
    Get https://127.0.0.1:5000/v1/_ping: http: server gave HTTP response to HTTPS client
    
    

    这是因为Docker在1.3.x之后默认docker registry使用的是https,为了解决这个问题,Linux中修改本地主机的docker启动配置文件,添加

    --insecure-registry 127.0.0.1:5000
    

    Docker for Mac中在图形化终端上修改如下,填写后“Apply&Restart”。

    输入图片说明
    docker images
    REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
    127.0.0.1:50000/xiachaoyang/env-jdk   latest              abe21e6640f3        2 days ago          587MB
    xiachaoyang/env-jdk                   latest              abe21e6640f3        2 days ago          587MB
    centos                                latest              49f7960eb7e4        3 weeks ago         200MB
    registry                              latest              d1fd7d86a825        5 months ago        33.3MB
    hyper/docker-registry-web             latest              0db5683824d8        20 months ago       599MB
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker tag abe21e6640f3  127.0.0.1:5000/xiachaoyang/env-jdk
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker push 127.0.0.1:5000/xiachaoyang/env-jdk
    The push refers to repository [127.0.0.1:5000/xiachaoyang/env-jdk]
    f65468761332: Pushed
    5ed6bb2dd837: Pushing [===============>                                   ]  120.4MB/387.4MB
    bcc97fbfc9e1: Pushing [=======================>                           ]  94.75MB/199.7MB
    
    • 查看推送结果
    输入图片说明
    • 删除镜像后测试本地仓库
    docker images
    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    centos                      latest              49f7960eb7e4        3 weeks ago         200MB
    registry                    latest              d1fd7d86a825        5 months ago        33.3MB
    hyper/docker-registry-web   latest              0db5683824d8        20 months ago       599MB
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker pull 127.0.0.1:5000/xiachaoyang/env-jdk
    Using default tag: latest
    latest: Pulling from xiachaoyang/env-jdk
    7dc0dca2b151: Already exists
    71ed27c83409: Pull complete
    b7e1a9577e86: Pull complete
    Digest: sha256:a7f0324eae38d9ce41389bccd43c92f3fa9d8a1a1dbe5ff52d6be978815fb267
    Status: Downloaded newer image for 127.0.0.1:5000/xiachaoyang/env-jdk:latest
    
    • 运行容器
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker images
    REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
    127.0.0.1:5000/xiachaoyang/env-jdk   latest              abe21e6640f3        2 days ago          587MB
    centos                               latest              49f7960eb7e4        3 weeks ago         200MB
    registry                             latest              d1fd7d86a825        5 months ago        33.3MB
    hyper/docker-registry-web            latest              0db5683824d8        20 months ago       599MB
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker run --rm 127.0.0.1:5000/xiachaoyang/env-jdk java -version
    java version "1.8.0_172"
    Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$
    
    

    <font color="red">docker restart 【容器ID】重新命令会保留挂参启动的配置信息 </font>

    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker ps
    CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                    NAMES
    9b17f2a0c10b        hyper/docker-registry-web   "start.sh"          23 hours ago        Up 23 hours         0.0.0.0:8000->8080/tcp   local-docker-res-web
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker container ls -a
    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                     PORTS                    NAMES
    9b17f2a0c10b        hyper/docker-registry-web   "start.sh"               23 hours ago        Up 23 hours                0.0.0.0:8000->8080/tcp   local-docker-res-web
    353ec8eb8c91        registry                    "/entrypoint.sh /etc…"   23 hours ago        Exited (2) 2 minutes ago                            local-docker-res
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker restart 353ec8eb8c91
    353ec8eb8c91
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$ docker container ls -a
    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
    9b17f2a0c10b        hyper/docker-registry-web   "start.sh"               23 hours ago        Up 23 hours         0.0.0.0:8000->8080/tcp   local-docker-res-web
    353ec8eb8c91        registry                    "/entrypoint.sh /etc…"   23 hours ago        Up 3 seconds        0.0.0.0:5000->5000/tcp   local-docker-res
    xiazhaoyangdeMacBook-Pro:~ xiazhaoyang$
    
    
    • 查看本地磁盘挂载中镜像

      若未找到本地镜像位置:需了解Docker在Mac中的数据卷挂载相关知识

    镜像源配置

    Mac下修改镜像源和阿里云镜像加速

    • 阿里云注册和购买
    • 产品和服务中选择容器镜像服务

    Aliyun提供的Docker for Mac 安装包下载目录

    image

    如何配置镜像加速器

    右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中将https://xxxxx.mirror.aliyuncs.com加到"registry-mirrors"的数组里,点击 Apply & Restart按钮,等待Docker重启并应用配置的镜像加速器。

    docker info
    
    # http://hub-mirror.c.163.com/为网易docker镜像源
    
    Insecure Registries:
     127.0.0.0/8
    Registry Mirrors:
     http://hub-mirror.c.163.com/
     https://xxxx.mirror.aliyuncs.com/
    Live Restore Enabled: false
    
    

    配置后可以明显加快镜像拉取速度.

    REFRENCES

    1. Dockerfile构建镜像
    2. Docker私有仓库搭建
    3. Dcoker数据卷挂载

    微信公众号

    架构探险之道

    扫码关注或搜索架构探险之道获取最新文章,坚持每周一更,坚持技术分享的我和你们一起成长 _

    相关文章

      网友评论

        本文标题:[Docker] Docker 之 CentOS 环境安装

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