Docker

CentOS7.6安装docker

可视化Web端Docker快速安装部署教程

docker 中 容器、镜像和仓库之间的关系

docker核心概念(镜像、容器、仓库)

centos7 搭建docker私有仓库--registry

Dockerfile自建镜像详解及案例

docker容器的资源配额和使用量控制(1)

【docker】Docker 的 daemon.json 详细解析

linux压测工具stress安装及使用

Linux压力测试工具--stress

Docker容器(五)——Docker静态化IP

Docker镜像仓库Harbor搭建极其详细

Docker之二一:搭建 Harbor 镜像仓库

docker-compose升级

docker安装命令:

  • 实验环境:centos7,先关闭防火墙systemctl stop firewalld && systemctl disable firewalld。把selinux关掉,vim /etc/selinux/config ,修改成SELINUX=disabled
1. yum install -y yum-utils device-maper-persistent-data lvm2    --安装docker环境依赖
2. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    --配置国内docker-ce的yum源(阿里云)
3. 运行完2后可以 vim /etc/yum.repo.d/docker-ce.repo 查看docker的yum源
4. yum install docker-ce docker-ce-cli containerd.io    --安装docker-ce
5. yum info php-mysql/docker-ce    --查看php-mysql/docker-ce包的作用
5.1 reboot后vim /etc/docke/daemon.json
6. systemctl start docker && systemctl enable docker    --启动docker服务并设置自启
7. 执行完6后可以 cat /proc/sys/net/ipv4/ip_forward 是1
8. docker version:查看版本,docker info:查看基本信息

docker基本命令:

1. docker search centos/nginx   --从Docker Hub中搜索centos或nginx的镜像,OFFICIAL列写着OK的是官方提供的意思
2. docker pull nginx    --从公网docker hub拉取(下载)nginx镜像
3. 安装完docker一般在 /etc 下会有个叫docker的目录,创建配置文件vim /etc/docker/daemon.json写下以下内容:
{
        "registry-mirrors":["https://r9xxm8z8.mirror.aliyuncs.com",
        "https://registry.docker-cn.com",
        "https://d8b3zdiw.mirror.aliyuncs.com"],
        ##上面是镜像加速地址,可配置多个
        "insecure-registries":["127.0.0.1:5000"]    ##私人镜像仓库的地址和端口号
}
4. 修改完daemon.json配置文件要 systemctl daemon-reload 再 systemctl restart docker
5. ls /usr/lib/systemd/system    --Linux所有服务的启动脚本在这个文件夹,里面有个docker.server,这个是docker的服务
6. docker load -i /root/docker-centos.tar    --从外部导入镜像docker-centos.tar
7. vim /etc/sysctl.conf 添加 net.ipv4.ip_forward = 1 ,开启配置路由转发功能,再sysctl -p使其生效
8. docker run -it centos:latest /bin/bash    --运行一个centos实例并进入其终端,exit退出,
    -i:以交互模式运行容器,通常与-t使用,-t:为容器重新分配一个伪输入终端,通常与-i使用。
9. cat /etc/redhat-release    --查看Linux具体版本
10. docker logs 59e778fd42a3/nginx01    --查看容器的日志,后面接容器ID或者容器名字都行

容器相关命令:
11 docker ps    --查看运行中的容器,
    docker ps -a    --查看所有的容器
    docker kill 59e778fd42a3    --杀死一个正在后台运行的容器,后面可接容器ID或容器name
    docker run -it -d -p 8080:80 --name nginx01 nginx:latest  /bin/bash
    -- -d:后台运行不进入容器终端,-p:指定容器的80端口映射到物理机的8080端口,--name=nginx01:把容器名字改为nginx01
    docker run -it -d -P --name nginx01 nginx:latest /bin/bash   -- -P:容器内部端口随机映射到主机的高端口
    docker run -d -p 127.0.0.1:5001:5000 nginx01 nginx:latest  /bin/bash    --这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口
    docker port 59e778fd42a3/<容器 NAMES>    --查看容器短偶映射情况  
    docker stop 59e778fd42a3/<容器 ID>    --停止一个容器
    docker restart 59e778fd42a3/<容器 ID>    --停止的容器可以通过 docker restart 重启
    docker start 59e778fd42a3/<容器 ID>    --使用 docker start 启动一个已停止的容器  
    docker rename nginx01 nginx02     --把nginx01的容器NAMES修改为nginx02
    docker rm -f 1e560fca3906/<容器 ID>    --删除ID为1e560fca3906的容器
    docker exec -it 59e778fd42a3 bash   --使用-d后台运行后想要进入容器终端可以使用这条
    docker export 59e778fd42a3 > /etc/docker/centos7.tar    --导出容器59e778fd42a3快照到本地文件centos7.tar
    cat docker/ubuntu.tar | docker import - test/ubuntu:v1    --将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1
    docker run -it --name nginx03 -h wlh.cn nginx /bin/bash    -- -h:指定主机名,进入容器后可以看到主机名是wlh.cn
    docker run -itd --restart=always --name nginx04 nginx  bash    --运行容器一个叫nginx04的容器,并且设置容器自启
    docker update --restart=always <容器 ID或名字>    --如果创建时未指定 --restart=always 属性,可通过update设置

docker容器重启策略如下:
    always:在容器退出时总是重启容器
    no:默认策略,在容器退出时不重启容器
    on-failure:在容器非正常退出时(退出状态非0),才会重启容器
    on-failure:3    --在容器非正常退出时重启容器,最多重启3次
    unless-stopped:在容器退出时总是重启容器,但是不考虑在docker守护进程启动时就已经停止了容器。

镜像相关命令:
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像
12. docker images    --列出本地主机上的镜像
    docker search httpd    --查找httpd镜像
    docker rmi httpd    --删除httpd镜像
    docker tag 860c279d2fec 192.168.0.3/nginx:wlh    --使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签
    docker pull httpd    --拉取镜像到本地
    docker push 192.168.0.3/nginx:wlh    --上传到.0.3的这个私人仓库

docker容器资源配额控制之CPU:
[root@hecs1 ~]# docker run --help | grep cpu-shares
  -c, --cpu-shares int                 CPU shares (relative weight)    --默认每个docker容器的CPU份额
  值都是1024,在tongyigecpu核心上,同时运行多个容器,容器的cpu加权的效果才能体现出来
    docker run -it --name  centos01 --cpu-shares 512 centos bash    --运行一个名字为centos01的镜像,
    并给他 分配512的cpu权重,进入容器终端后,
root@59e778fd42a3:/# cat /sys/fs/cgroup/cpu/cpu.shares 512    --可以看到是512,说明配置权重成功

taskset:指定一个或多个进程只在一个或多个cpu上运行,常与-cp结合,默认第一个cpu的ID是0,
[root@hecs1 ~]# ps aux | grep sshd
root      1069  0.0  0.2 112936  4356 ?        Ss   Oct08   0:00 /usr/sbin/sshd -D
root      3525  0.0  0.3 159596  5992 ?        Ss   10:09   0:00 sshd: root@pts/1
root      3546  0.0  0.3 159596  5908 ?        Ss   10:10   0:00 sshd: root@notty
root      5849  0.0  0.0 112812   972 pts/1    R+   10:28   0:00 grep --color=auto sshd
root     22838  0.0  0.3 159596  6100 ?        Ss   Oct08   0:00 sshd: root@pts/2
    taskset -cp 1,2 1069    --指定sshd进程只在CPU1,2上运行,也就是在第二,三个核心上跑
    pstree -p    --查看带PID的进程树
    taskset -cp 1    --查看PID为1的进程在那几颗CPU跑,centos7中PID为1的进程是:systemd
    docker run -it --name nginx06_cpu cpuset-cpus 0-2 centos bash  --创建一个名为nginx06_cpu的容器,并指定在0-2CPU上运行,也就是三颗cpu上跑,
    cat /sys/fs/cgroup/cpuset/cpuset.cpus    --查看容器是在哪颗cpu上运行
    stress -c 2 -i2 -v -t 20s    --性能压测工具,产生2个CPU进程,2个io进程,20秒后停止运行
下面测试两个容器不同cpu权重在同颗cpu运行,查看cpu占用情况:
    docker run -itd --name docker10 --cpuset-cpus 0,1 --cpu-shares 512 centos:7.6 /bin/bash
    docker run -itd --name docker20 --cpuset-cpus 0,1 --cpu-shares 1024 centos:7.6 /bin/bash
    创建完2个centos7.6的容器后(因为只有centos7.6才带了yum命令)分别进入容器先    yum install -y epel-release
    安装好epel源再yum install -y stress压测工具
    两容器都执行 stress -c2 -v -t 2m,产生两个CPU进程,2分钟后结束。用top -d 1  可以看到两个容器的CPU
    占比是呈倍数的,说明权重分配OK,停掉一个容器后,另一个容器可以100%cpu占比。
    docker run -it --rm --name wlh centos sleep 5    --用centos镜像运行一个叫wlh的容器,5秒钟后自动删除该容器,--rm:自动删除,sleep 5:5秒

docker容器资源配额控制之内存:
    docker run -it -m 128m --name wlh01 centos    --指定wlh01容器可使用的内存是128m
    root@59e778fd42a3:/# cat /sys/fs/cgroup/memory/memory.limit_in_bytes 
    134217728    --134217728字节=128兆字节=128m
    docker run -it -cpuset-cpus 0,1 -m 128m --cpu-shares 500 --name wlhcontrol centos /bin/bash
用centos镜像创建一个叫wlhcontrol的容器,指定在cpu0,1上运行,指定使用内存128m,指定cpu权重500(权重越大,争取的cpu占比更大,同时间能用更多资源)

docker数据映射:
语法:docker run -itd -v /src:/dst centos bash
-v用来指定挂载目录,冒号:前面的/src为物理机本地目录,:后面的/dst为容器里的mulu。
好处:这样当docker坏了,数据还在物理机上,在使用Apache镜像启动一个docker实例就可以了,数据不丢失
例1:把物理机的/var/www/html映射到docker实例的/var/www/html
1. mkdir -p /var/www/html    --物理机没有该目录先创建目录
2. docker run -it --name wlhweb1 -v /var/www/html:/var/www/html centos bash  --容器没有该目录会自动创建
3. echo "aaa" > /var/www/html/index.html    --容器里执行该命令
4. cat /var/ww/html/index.html    --物理机查看index.html有aaa内容

docker容器资源配额控制之IO:
[root@hecs1 ~]# docker run --help | grep write-b
      --device-write-bps list          Limit write rate (bytes per second) to a device (default [])
[root@hecs1 ~]# docker run --help | grep read-b
      --device-read-bps list           Limit read rate (bytes per second) from a device (default [])

例1:限制容器实例对硬盘的最高与入速度设定为 IMB/S。
--device 参数:将主机设备添加到容器
[root@xuegod63~1# mkdir -p /var/www/html/-
[root@xuegod63 ~# docker run -it-v /var/www/html/:/var/www/html --device /dev/sda:/dev/sda --device-write-bps /dev/sda:1mb centos /bin/bash
[root@bd79042dbdc9 /# time dd if=/dev/sda of=/var/www/html/test.out bs=1Mcount=50 oflag=direct,nonblock.
注:dd 参数:
direct:读写数据采用直接10方式,不走缓存。直接从内存写硬盘上。。
nonblock:读写数据采用非阻塞1O方式,优先写dd命令的数据
50+0 records in
50+0 records out.
52428800 bytes (52 MB) copied, 50.1831 s,1.0 MB/s.
real 0m50.201s.
user 0m0.001s.
sys 0m0.303s
注:发现1秒写1M。限制成功。~

构建镜像:
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

runoob@runoob:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "[email protected]"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

runoob@runoob:~$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
 ---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "[email protected]"
 ---> Using cache
 ---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
 ---> Using cache
 ---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......
参数说明:

-t :指定要创建的目标镜像名

. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec

runoob@runoob:~$ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
runoob/centos       6.7                 860c279d2fec        About a minute ago   190.6 MB
runoob/ubuntu       v2                  70bf1840fd7c        17 hours ago         158.5 MB
ubuntu              14.04               90d5884b1ee0        6 days ago           188 MB
php                 5.6                 f40e9e0f10c8        10 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago          182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago          324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago          194.4 MB
ubuntu              15.10               4e3b13c8a266        5 weeks ago          136.3 MB
hello-world         latest              690ed74de00f        6 months ago         960 B
centos              6.7                 d95b5ca17cc3        6 months ago         190.6 MB
training/webapp     latest              6fae60ef3446        12 months ago        348.8 MB
我们可以使用新的镜像来创建容器

runoob@runoob:~$ docker run -t -i runoob/centos:6.7  /bin/bash
[root@41c28d18b5fb /]# id runoob
uid=500(runoob) gid=500(runoob) groups=500(runoob)
从上面看到新镜像已经包含我们创建的用户 runoob。

docker-comepose安装

安装 Docker-Compose
在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。

例如,在 Linux 64 位系统上直接下载对应的二进制包。

$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
使用 Docker-Compose 检查是否安装成功

$ docker-compose -v
  docker-compose version 1.17.1, build 6d101fb
Docker-Compose 已经安装成功,得给 /usr/local/bin/docker-compose 文件夹分配权限。

$ sudo chmod +x /usr/local/bin/docker-compose

你可能感兴趣的:(Docker)