图片 11

Docker安装使用和常见问题解决方案,Docker镜像及容器

2、对内存使用的限制

  • 在docker中可以通过docker run -m
    命令来限制内存使用量,相应的配置文件为/sys/fs/cgroup/memory/memory.kmem.limit_in_bytes。需要注意的是,一旦容器cgroup使用的内存超过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制内存控制在限制范围之内,进程就会被杀死。

docker run -m 512m 容器名 //限制容器的内存为512m

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

# docker info

3、查看镜像信息

docker images

图片 1

REPOSITORY —镜像属于的仓库
TAG —镜像的标签信息,标记同一个仓库中不同镜像
IMAGE ID —镜像的唯一ID号,唯一标识了该镜像
CREATED —镜像创建时间
SIZE —镜像大小

  • 还可以根据镜像的唯一标识ID号,获取镜像详细信息。

docker inspect 11426a19f1a2

图片 2

  • 使用docker tag命令来为本地的镜像添加新的标签。

命令格式:docker tag 镜像名称:[标签] 新名称:[新标签]

  • 例如:本地镜像httpd添加新的名称为apache,新的标签为apache1

docker tag httpd apache:apache1

图片 3

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

将容器做成镜像。

3、容器的进入

  • 当不进入容器时,让容器执行任务,一条任务执行完成后容器会自动停止,为了避免繁琐的情况,我们需要进入容器执行,且退出容器后,容器并不会停止。

命令格式:docker exec -it e1e05c66ec9c /bin/bash
-i 表示让容器的输入保持打开
-t 表示让docker分配一个伪终端

  • 例如

docker exec -it e1e05c66ec9c /bin/bash

图片 4

EOF

出现以下xin说明信息则表明安装成功。

2、获取镜像

  • 对于docker来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版,因此也可通过制定标签来下载指定版本,这里的标签(tag)就是用来区分镜像版本的。

  • 下载镜像httpd

docker pull httpd

图片 5

整个下载过程可以看出,镜像文件由若干层(Layer)组成,我们称之为AUFS(文件联合系统),是实现增量保存与更新的基础,下载过程中会输出镜像的各层信息

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

# docker  rmi  –f 
registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5

6、上传镜像

  • 本地存储的镜像文件越来越多,就要一个专门的地方存放这些镜像—仓库。目前比较方便的就是公共仓库,默认上传的是Docker
    hub官方仓库,需要注册账号完成登录后才能上传。

  • 在上传镜像之前还需要对本地镜像添加新的标签,然后再使用docker
    push命令上传。

docker tag httpd apache:test
docker login

Username: madeb  //此账号需自己注册
Password:
Login Succeeded

  • 成功登录后就可上传镜像了。

docker push apache:test

  • 注:若是需要退出登录

docker logout

enabled=1

# docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5

4、删除镜像

  • 方法一:docker rmi 仓库名称:标签
  • 方法二:docker rmi 镜像ID号

  • 注:当一个镜像有多个标签的时候,docker rmi
    命令只是删除该镜像多个标签中的指定标签,不会影响镜像文件。但当该镜像只剩下一个标签的时候,此时删除该标签的时候会彻底删除该镜像。

  • 当使用方法二删除时,必须确保该镜像没有被容器使用才能进行,删除时系统会先删除掉指向该镜像的所有标签,然后删除镜像本身。如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,在删除镜像

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

强制删除镜像。

4、容器的导出与导入

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

#systemctl start docker#运行Docker守护进程

#systemctl stop docker#停止Docker守护进程

#systemctl restart docker#重启Docker守护进程

3、对blkio的限制

  • 如果是在一台服务器上进行容器的混合部署,那么会出现同时有几个程序写磁盘数据的情况,这时可以–device-write-iops选项来限制写入的iops,相应的还有–device-read-bps选项可以限制读取的iops,但是这种方法只能针对blkio限制的是设备(device),而不是分区,相应的配置文件/sys/fs/cgroup/blkio/docker/容器ID/blkioo.throttle.write_iops_device

docker run –device-write-bps /dev/sda1:1mb 容器名
//限制容器的/dev/sda1的写入ipos为1MB

更多Docker相关教程见以下内容: 

Linux 下的 Docker 安装与使用 

CentOS 7安装Docker应用容器引擎

CentOS 7.3环境安装Docker 18.03

使用Docker分分钟启动常用应用 

CentOS 7使用Docker搭建GitLab服务器 

30分钟带你了解Docker 

Docker容器常见操作详解 

Docker发布应用程序指南

Docker
的详细介绍
:请点这里
Docker
的下载地址
:请点这里

Linux公社的RSS地址:

本文永久更新链接地址

图片 6

### 5.1 下载官方centos镜像

# docker run -d –name apache e121d5f99e1e

5、存出镜像和导入镜像

1) docker  images;查看镜像ID。

# docker commit 4c8066cd8c01 apachephp:v1

容器导入

  • 导出的文件从A机器拷贝到B机器,之后使用docker
    import命令导入,成为镜像。

<br/>命令格式:cat 文件名 | docker import –
生成的镜像名称:标签<br/>

  • 例如导入apache1 成为本地镜像

cat apache1 | docker import – apache1
注:此处必须先使用cat,不然无法导入
docker images

REPOSITORY          TAG                IMAGE ID            CREATED     
      SIZE
apache1            latest              2bfb89eb2c5d        49 seconds
ago      174MB
apache              apache1            11426a19f1a2        8 days ago   
      178MB
httpd              latest              11426a19f1a2        8 days ago   
      178M

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

# yum install docker-io –y

# systemctl start docker

3、仓库(Repository)

仓库是用来集中存放镜像的地方,当自己创建了镜像后,可以使用push命令将它上传到公共仓库(Public)或者私有仓库(Private),这样,当其他机器想要使用时,直接下载下来即可使用。

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

2、安装并运行Docker。

载入镜像

命令格式:docker load < 存出的镜像文件
或者:
docker –input 存出的镜像文件

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

修改标签,由于阿里云仓库镜像的镜像名称很长,可以修改镜像标签以便记忆区分。

存出镜像

  • 当需要把一台机器上的镜像迁移到另一台机器上的时候,需要将镜像保存成本地文件,这一过程叫做存出镜像。
  • 别的机器通过拷贝的镜像,将该镜像导入到自己的镜像库中,这一过程叫做载入镜像。

<br/>命令格式:docker save -o 存储文件名 存储的镜像<br/>

  • 将本地的httpd镜像存出apache2

docker save -o apache2 httpd

图片 7

### 5.2 docker常见命令

# docker commit containerID/containerName  newImageName:tag

四、Docker资源控制

解决方法:

1、添加yum源。

3、限制cpu内核使用

  • 如果服务器有16个核心,那么cpu编号为0~15,使容器绑定第1~4个内核使用。

docker run –cpuset-cpus 0,1,2,3 容器名

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

#dockerexec-ti apache /bin/bash

1、容器的创建与启动

  • 新创建的容器处于停止状态,不运行任何程序。
  • 需要在其中发起一个进程来启动容器,该进程是容器的唯一进程。
  • 该进程结束时,容器也会完全停止。

<br/>命令格式:docker create [选项] 镜像 运行的程序<br/>

-i 让容器的输入保持打开
-t 让Docker分配一个伪终端

docker create -it httpd /bin/bash
docker ps -a
docker start e1e05c66ec9c //开启容器
docker ps -a

图片 8

  • 创建容器并执行一条命令。
  • 这种方式和在本地执行命令几乎没有区别

docker run httpd /usr/bin/bash -c ls /

  • 容器在执行完ls /
    后会立马停止,这个时候就需要让docker以守护态在后台运行
  • 例如,下面的程序就会在后台持续运行。

docker run -d httpd /usr/bin/bash -c ls / “while true; do echo
hello;done”

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

图片 9

二、Docker镜像操作

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

e121d5f99e1e是执行docker images命令查询到的IMAGE ID,使用docker
run命令进入容器。

2、容器(Container)

容器是镜像的另一个运行实例,是独立运行的一个或一组应用以及他们所必须的运行环境,包括文件系统、系统库类、shell环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。

#### 5.2.3 容器的进入

镜像管理。本文使用的是来自阿里云仓库的Apache镜像。

1、镜像(image)

Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为是一个面向Docker容器引擎的只读模板,比如一个镜像可以是一个完整的CentOS操作系统,也可以是一个安装了MySQL的应用程序,称之为一个镜像。
镜像文件用户可以自己创建和更新现有镜像,也可以从网上下载已经做好的应用镜像直接使用。

  ●  passwd root; 修改root密码。

容器管理。

容器导出

  • 无论这个容器是运行还是停止均可导出。

<br/>命令格式:docker export 容器ID/名称 > 文件名<br/>

  • 将容器导出为apache1

docker export e1e05c66ec9c > apache1

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

# docker tag 
registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest aliweb:v1

三、Docker容器操作

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

run命令加上–d参数可以在后台运行容器,—name指定容器命名为apache。

一、Docker核心概念

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

# docker run -d -p 8080:80 apachephp:v1

1、搜索镜像

  • 通过docker search 命令搜索远端官方仓库的共享镜像。
  • 搜索关键字为httpd的镜像

docker search httpd

图片 10

  ● 安装docker: $ yum install docker-engine

运行容器并将宿主机的8080端口映射到容器里去。

2、容器的终止

  • 想要停止容器的运行前需要查看容器的运行状态,以及ID号

docker ps -a

CONTAINER ID        IMAGE              COMMAND            CREATED       
    STATUS              PORTS              NAMES
e1e05c66ec9c        httpd              “/bin/bash”        26 minutes
ago      Up 25 minutes      80/tcp              friendly_eucliddocker
stop e1e05c66ec9c

  • 当查看到STATUS状态为Exited时,即状态终止。

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

图片 11

1、限制cpu使用速率

  • 在docker中可以通过–cpu-quota选项来限制cpu使用率,cpu的百分比是以1000为单位的。

docker run –cpu-quota 20000 e1e05c66ec9c //cpu的使用率限定为20%

  • 还可以通过Cgroup配置文件立即生效

echo 20000 >
/sys/fs/cgroup/cpu/docker/e1e05c66ec9ced2d6290ebe8e3fdea27f439dcbeea70921ec5d9e5b0bcffaf11/cpu.cfs_quota_us

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

# docker images

5、容器的删除

  • 可以使用docker rm 命令将一个已经处于终止状态的容器删除。

<br/>命令格式:docker rm 容器ID/名称<br/>

docker rm e1e05c66ec9c
docker ps -a | grep e1e05c66ec9c

  • 如果要删除一个正在运行的容器,可以添加-f选项强制删除,但建议先将容器停止在做删除操作。

docker默认的存储目录在本地/var/lib/docker/,docker的镜像、容器、日志等内容全部都存储在这里,也可单独使用大容量分区来存储这些内容,并且一般选择LVM逻辑卷,从而避免出现docker运行过程中存储目录容量不足的问题。

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

# yum install epel-release –y

# yum clean all

# yum list

2、多任务按比例分析CPU

  • 当有多个容器任务运行时,很难计算cpu的使用率,为了使容器合理使用cpu资源,可以通过–cpu-share选项设置cpu按比例共享资源,这种方式还可以实现cpu使用率的动态调整。

docker run –cpu-shares 1024 容器A
docker run –cpu-shares 1024 容器B
docker run –cpu-shares 2048 容器C

## 4. 安装

查看已有镜像。

#### 5.2.4 其它命令说明

在浏览器输入宿主机ip加8080端口访问测试,出现以下内容则说明运行成功。

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

为了方便测试和恢复,先将源镜像运行起来后再做一个命名简单的镜像做测试。

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

使用exit可以退出当前容器。

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

Docker守护进程管理。

gpgkey=

进入后台运行的容器。

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

# docker run –ti e121d5f99e1e /bin/bash

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

3、检查安装结果。

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

   4) reboot 重启即可。

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

#### 5.2.1 创建容器

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

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

reboot 即可。

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

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

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

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

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

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

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

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

gpgcheck=1

### 2.2 增加一个yum源

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

### 2.3 cgroup挂载

## 1. 说明

   2)下载自己想要升级的内核rpm包:  :
rpm -ivh 安装;

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

## 2. 安装准备

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

   5)
编译形式升级内核:

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

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

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

name=Docker Repository

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

  ●rpm包形式更新内核:

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

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

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

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

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

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

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

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

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

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

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

  ● **开机挂载cgroup**:

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

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

###  2.1 内核升级

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

baseurl=

## 5. docker常见命令

[dockerrepo]