Docker安装使用和常见问题解决方案

作者: 67f17334c94f | 来源:发表于2018-01-19 17:50 被阅读966次

    # Docker安装使用和常见问题解决方案

    ## 1. 说明

    由于公司的服务器基本都是centos 6.X的系统且内核版本为2.6.X的,而CentOS/RHEL对Docker的支持比ubuntu/Debian晚,且docker官方说明只支持内核为3.8及以上版本的内核。

    因此本文主要分享自己在centos上的安装过程以及遇到的问题所提供的解决方案。并附常见命令说明,和本地目录到容器目录的映射,以及容器端口到本地端口的的映射,还有容器的生成和落地以及重新加载。

    ## 2. 安装准备

    ###  2.1 内核升级

    ***由于docker官方说明只支持3.8及以上版本的内核,而我们公司自己裁剪的系统基本上是2.6的内核版本,因此提供内核更新说明:***

      ●rpm包形式更新内核:

       1)查看当前版本: uname -a

       2)下载自己想要升级的内核rpm包:  https://pkgs.org/download/kernel : rpm -ivh 安装;

       3) 修改/etc/grub.conf的:   将default=1, 改为 default=0。(记得备份哦)。

       4) reboot 重启即可。

       5) 编译形式升级内核:https://www.cnblogs.com/zhunian/archive/2012/04/04/2431883.html

    ### 2.2 增加一个yum源

    $ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'

    [dockerrepo]

    name=Docker Repository

    baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/

    enabled=1

    gpgcheck=1

    gpgkey=https://yum.dockerproject.org/gpg

    EOF

    ### 2.3 cgroup挂载

    **cgroups可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基石。**

      ● **开机挂载cgroup**:

    1) 首选禁用cgroup对应服务cgconfig。service cgconfig stop # 关闭服务 ;chkconfig cgconfig off # 取消开机启动

    2) vim /etc/fstab;尾部添加: none /cgroup cgroup defaults 0 0 #开机挂载

    ## 3. 常见错误及解决方案

    1) centos  System error: write /cgroup/docker  no space left on device

    解决方法:

    echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children;

    echo 0 > /sys/fs/cgroup/docker/cpuset.mems;

    echo 0 > /sys/fs/cgroup/docker/cpuset.cpus

    2) FATA[0000] Error starting daemon: Devices cgroup isn't mounted

    这个错误为cgroup在宿主机上没有挂载。

    vi /etc/fstab;结尾添加: none        /sys/fs/cgroup        cgroup        defaults    0    0;

    reboot 即可。

    ## 4. 安装

      ● 安装docker: $ yum install docker-engine

      ● 运行docker守护进程:$ service docker start; 开机启动 $  chkconfig docker on;

      ● 输入docker -h,如果有输出,就证明docker在形式上已经安装成功。

    ## 5. docker常见命令

    ### 5.1 下载官方centos镜像

      ● 下载官方的 CentOS 镜像到本地

    1) 下载官方的 CentOS 镜像到本地 :  docker pull centos;

    2) 确认 CentOS 镜像已经被获取: docker images centos

    3) 运行一个 Docker 容器:docker run -i -t centos /bin/bash

    4) 结果: [root@dbf66395436d /]#

    我们可以看到,CentOS 容器已经被启动,并且我们得到了 bash 提示符。在 docker 命令中我们使用了 “-i 捕获标准输入输出”和 “-t 分配一个终端或控制台”选项。若要断开与容器的连接,输入 exit。

    ### 5.2 docker常见命令

    #### 5.2.1 创建容器

    在5.1中通过下载官方的 CentOS 镜像到本地 (docker pull centos),所以本地已经存在一个官方的REPOSITORY centos的docker镜像。(可通过docker images 命令查看)。

    因此我们可以在原始的centos镜像上创建属于自己的镜像。

    1)**进入镜像:** docker run -it centos:latest /bin/bash; 进入centos镜像; 现象 “[root@e2adb98cd5c2 /]# ” ,其中 e2adb98cd5c2 为新的容器id,我们在保存自己的容器时会用到。

    2)**在镜像中部署自己的服务:** 进入镜像之后部署自己的服务,如果想上传本地的服务以及依赖文件。执行步骤1命令时应加入 “ -v /data:/tmp”, 即docker run -it  -v /data:/tmp centos:latest /bin/bash;表示将本地的/data目录映射到容器的/tmp目录下,可将本地的服务以及依赖文件copy至本地/data下,即可在容器的/tmp目录下看到。

    3)**生成镜像:** 将自己的服务部署好之后,exit退出容器。 通过“docker commit -m=”备注” 容器id imagesname”提交并生成新的镜像,可通过“docker images”查看。

    #### 5.2.2 容器落地和重新加载

    将自己生成的容器生成本地镜像,然后可以用这个镜像在其他的流行的linux机器上加载和运行。

    1) 容器落地成镜像:        docker save -o  镜像文件名  REPOSITORY;  REPOSITORY为要保存的容器的名字。(可通过docker images查看)

    2) 镜像重新加载成容器: docker load <  文件名 或者 docker load --input 文件; 从镜像文件载入容器像,成功之后,可通过docker images查看。

    #### 5.2.3 容器的进入

    一般来说,容器在我们退出之后,就停止了,如果我们要在里面运行一些后台程序怎么办呐? 我们可以让容器变成后台程序并通过ssh方式进入操作容器。

    1) 首先进入容器,在容器中部署sshd服务。

      ● docker run -it centos:latest /bin/bash;启动docker;

      ● yum -y install openssh-server    openssh-clients; 安装sshd;

      ●  /usr/sbin/sshd -D; 启动sshd服务

      ● Could not load host key 错误处理;之后再次启动sshd服务;

        1) ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""

        2) ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""

        3) ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""

      ● 编辑/etc/ssh/sshd_config配置文件,将UsePAM yes改为no;

      ●  passwd root; 修改root密码。

      ● docker commit containerid imagename; exit退出后提交镜像。

    2)映射容器端口到本地的sshd服务端口即22

    命令: docker run -it -d -p 20022:22 -v /data:/tmp REPOSITORY  /usr/sbin/sshd -D;

    参数说明: -d:让容器在后台运行。 -p 20022:22:将容器内的20022端口映射到本地22端口。-v /data:/tmp 映射本地的/data目录到容器的/tmp目录,可以作为容器里运行服务的输入输出。REPOSITORY  即为安装好sshd服务以及部署好环境的仓库名(可通过docker images查看)。

    #### 5.2.4 其它命令说明

    1) docker  images;查看镜像ID。

    2) docker ps ;  查看容器ID和运行的容器,即(CONTAINER ID)/(NAMES):

    3) docker logs 容器id;在容器内使用docker logs命令,查看容器内的标准输出

    4) docker stop (CONTAINER ID)/(NAMES);在容器内使用,停止容器。

    5) docker top (CONTAINER ID)/(NAMES); 容器外使用,查看容器内的进程。

    6) docker rm  -f (CONTAINER ID)/(NAMES); 删除docker ps显示的images。

    7) docker rmi  -f  (IMAGE ID); 删除docker images显示的images。

    相关文章

      网友评论

        本文标题:Docker安装使用和常见问题解决方案

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