一看必会系列:docker 练习 8 Docker 数据存储管理

No Comments Docker

这次练习 数据卷容器。本地数据卷不如 -v灵活就不试了

先总结一下 三种方式,哪种用的爽用哪种
1.建立本地数据卷  
2.直接将主机的目录 挂载进容器
3.建立数据卷容器

第一种:建立本地数据卷
还是说一下
root@docker01:~# docker volume create -d 名字 test
test

目录生成在 /var/lib/docker/volumes/ 下面
root@docker01:~# ll /var/lib/docker/volumes/ |grep te
drwxr-xr-x  3 root root  4096 3月  19 16:17 test/

查看 数据卷 命令
root@docker01:~# docker volume ls
DRIVER              VOLUME NAME
local               test   —生成的数据卷
local               disk001
local               disk003

使用生成的数据卷  这个要注意 -v 后不有“/” 和其它挂载命令不同
docker run -it -v disk001:/opt alpine  #正确
docker run -it -v /disk001:/opt alpine  #不正确一定要注意

生成测试数据
/opt # ls   
1       11      13      15      17      19      20      4       6       8       {1.10}
10      12      14      16      18      2       3       5       7       9       {1.20}
/opt #

在主机的目录进行验证  两端一至为正常
root@docker01:/var/lib/docker/volumes/disk001/_data# ls
1  10  11  {1.10}  12  {1.20}  13  14  15  16  17  18  19  2  20  3  4  5  6  7  8  9

 

 

第二种用的太多。
-v /主机目录:/容器内目录
docker run -it -v /test:/opt alpine  #正确

不过也有官方推荐的挂载方法 

------中间广告---------

root@docker01:~# docker run -it –mount type=bind,source=/test,destination=/opt alpine
/ # cd /opt/
/opt # ls
1        2        {1..20}
/opt # cat 1
dfdf

第三种:

数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载 。

首先,创建一个数据卷容器 dbdata, 并在其中创建一个数据卷挂载到/ dbdata:

root@docker01:~# docker run -it -v /dbdata –name dbdata alpine
/ # ls
bin     dev     home    media   opt     root    sbin    sys     usr
dbdata  etc     lib     mnt     proc    run     srv     tmp     var
/ #

创建两个 要挂载的容器
root@docker01:~# docker run -it –volumes-from /dbdata –name db1 alpine
root@docker01:~# docker run -it –volumes-from /dbdata –name db2 alpine

/ #
/ # ls
bin     dev     home    media   opt     root    sbin    sys     usr
dbdata  etc     lib     mnt     proc    run     srv     tmp     var
/ #

在这三个容器  dbdata  db1 db2 中任意修改/dbdata数据,其它容器都会被修改,可以理解为同一个盘

划重点,使用–volumes-from挂载,数据卷容器可以不启动

介绍:

在生产环境中使用 Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享,这必然涉及容器的数据管理操作 。
容器中的管理数据主要有两种方式 :
口数据卷 (DataVolumes): 容器内数据直接映射到本地主机环境;
口数据卷容器(DataVolume Containers): 使用特定容器维护数据卷。
本章将首先介绍如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数
据卷中 。 接下来,介绍如何使用数据卷容器在容器和主机、容器和容器之间共享数据,并实 现数据的备份和恢复 。

docker volume
除了 create 子命令外, docker volume 还支持 inspect (查看详细信息)、 ls (列
出已有数据卷)、 pru口e (清理无用数据卷)、 rm (删除数据卷)等

一看必会系列:docker 练习 8 Docker 数据存储管理

No Comments Docker

这次练习 数据卷容器。本地数据卷不如 -v灵活就不试了

先总结一下 三种方式,哪种用的爽用哪种
1.建立本地数据卷  
2.直接将主机的目录 挂载进容器
3.建立数据卷容器

第一种:建立本地数据卷
还是说一下
root@docker01:~# docker volume create -d 名字 test
test

目录生成在 /var/lib/docker/volumes/ 下面
root@docker01:~# ll /var/lib/docker/volumes/ |grep te
drwxr-xr-x  3 root root  4096 3月  19 16:17 test/

查看 数据卷 命令
root@docker01:~# docker volume ls
DRIVER              VOLUME NAME
local               test   —生成的数据卷
local               disk001
local               disk003

使用生成的数据卷  这个要注意 -v 后不有“/” 和其它挂载命令不同
docker run -it -v disk001:/opt alpine  #正确
docker run -it -v /disk001:/opt alpine  #不正确一定要注意

生成测试数据
/opt # ls   
1       11      13      15      17      19      20      4       6       8       {1.10}
10      12      14      16      18      2       3       5       7       9       {1.20}
/opt #

在主机的目录进行验证  两端一至为正常
root@docker01:/var/lib/docker/volumes/disk001/_data# ls
1  10  11  {1.10}  12  {1.20}  13  14  15  16  17  18  19  2  20  3  4  5  6  7  8  9

 

 

第二种用的太多。
-v /主机目录:/容器内目录
docker run -it -v /disk001:/opt alpine  #正确

第三种:

数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载 。

首先,创建一个数据卷容器 dbdata, 并在其中创建一个数据卷挂载到/ dbdata:

root@docker01:~# docker run -it -v /dbdata –name dbdata alpine
/ # ls
bin     dev     home    media   opt     root    sbin    sys     usr
dbdata  etc     lib     mnt     proc    run     srv     tmp     var
/ #

创建两个 要挂载的容器
root@docker01:~# docker run -it –volumes-from /dbdata –name db1 alpine
root@docker01:~# docker run -it –volumes-from /dbdata –name db2 alpine

/ #
/ # ls
bin     dev     home    media   opt     root    sbin    sys     usr
dbdata  etc     lib     mnt     proc    run     srv     tmp     var
/ #

在这三个容器  dbdata  db1 db2 中任意修改/dbdata数据,其它容器都会被修改,可以理解为同一个盘

划重点,使用–volumes-from挂载,数据卷容器可以不启动

介绍:

在生产环境中使用 Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享,这必然涉及容器的数据管理操作 。
容器中的管理数据主要有两种方式 :
口数据卷 (DataVolumes): 容器内数据直接映射到本地主机环境;
口数据卷容器(DataVolume Containers): 使用特定容器维护数据卷。
本章将首先介绍如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数
据卷中 。 接下来,介绍如何使用数据卷容器在容器和主机、容器和容器之间共享数据,并实 现数据的备份和恢复 。

docker volume
除了 create 子命令外, docker volume 还支持 inspect (查看详细信息)、 ls (列
出已有数据卷)、 pru口e (清理无用数据卷)、 rm (删除数据卷)等

一看必会系列:docker 练习 7 制作java运行环境

No Comments Docker

docker file 制作java 运行环境

目录结构
├── dockerfile
└── run.sh

dockerfile 内容

FROM reg.ccie.wang/library/centos:7.5.1804
MAINTAINER jeff@jdccie.com
RUN yum -y install java-1.8.0-openjdk
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["./run.sh"]
EXPOSE 10091   #这个一定要有了这个可以直接用-P来分配端口

run.sh  内容
#!/bin/bash
cat >>/etc/security/limits.conf<<eof
* soft nofile 555550
* hard nofile 555550
eof

nohup java -jar /opt/dev/qun-exec.jar > /opt/dev/nohup.log & #后台运行命令

生成镜像  在当前目录下  docker build -t 镜像名 点
docker build -t centos_java1.8 .

root@docker01:/opt/dockerfile/centos_java1.8# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
centos_java1.8   看下大小还可以             latest              9228d3ca4c44        3 hours ago         469MB                                      jave1.8             7799128ae1fa        18 hours ago        812MB
openjdk          原厂的大小                 13                  3351f725113b        4 days ago          462MB
java             原厂的大小                 8                   d23bdf5b1b1b        2 years ago         643MB
reg.ccie.wang/library/openjdk8-apline-ssh   1.8                 da33dfcb143e        4 weeks ago         136MB
上面这个就相当小了。基于apline

使用指定端口启动 -p
root@docker01:~# docker run -itd -p 10091:10091 -v /opt/dockerfile/java/:/opt/dev centos_java1.8
root@docker01:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
4e1957dd2c69        centos_java1.8      "./run.sh"          18 seconds ago      Up 16 seconds       0.0.0.0:10091->10091/tcp   lucid_margulis

使用随机端口启动 -P
root@docker01:~# docker run -itd -P -v /opt/dockerfile/java/:/opt/dev centos_java1.8
33d6b201ed7e372d5aae686cf48ee3bd155298fac2440e8019e047163d62defb
root@docker01:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
63a1c53f7504        cf00c586f612        "/bin/bash"         2 minutes ago       Up 2 minutes        0.0.0.0:32810->10091/tcp   blissful_hypatia
root@docker01:~#

验证
root@docker01:~# curl localhost:10091
curl: (56) Recv failure: Connection reset by peer
root@docker01:~# curl 127.0.0.1:10091
{"timestamp":"2019-03-19 14:26:05","status":404,"error":"Not Found","message":"No message available","path":"/"}root@docker01:~#
root@docker01:~# curl localhost:10091
{"timestamp":"2019-03-19 14:26:08","status":404,"error":"Not Found","message":"No message available","path":"/"}root@docker01:~#
以上为正常

 

 

—————报错
容器里面 Failed to get D-Bus connection: Operation not permitted
解决方式
[root@b349462aa85a /]# systemctl start zabbix-agent
Failed to get D-Bus connection: Operation not permitted
[root@b349462aa85a /]#
解决两种方式
1.使用脚本启动
/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
2. 换启动方式
原来的运行方式
docker run -it reg.ccie.wang/library/centos:7.5.1804 /bin/bash
现改为
docker run -it reg.ccie.wang/library/centos:7.5.1804 /usr/sbin/init

一看必会系列:docker 练习 6 docker资源限制cpu memory

No Comments Docker

 

前面练完知道如何使用docker 那么如保更好的控制也需要进行练习

Docker 基于 Linux 内核提供的 cgroups 功能,可以限制容器在运行时使用到的资源,比如内存、CPU、块 I/O、网络等。

首先查看 cpu的数量
root@docker:~# lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              4   ---4个
On-line CPU(s) list: 0-3   ----cpu序号 0,1,2,3

先来看一下容器使用的内存CPU及相关资源

root@docker:~# docker stats dd4d7133240f

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT    MEM %               NET I/O             BLOCK I/O           PIDS
dd4d7133240f        quizzical_curran    0.00%               5.379MiB / 7.79GiB   0.07%               9.83MB / 93.8kB     0B / 56.8MB         1
^C
root@docker:~#

从以上看 发现 是没有限制可以共用host的所有资源,
这样会影响资源有分配和容器的稳定性。系统可能kill容器

一,限制内存

命令
docker run -it -m  内存大小

root@docker:~# docker run -it -m 500M reg.ccie.wang/test/ubuntu:sshd001 /bin/bash
WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

运行下面的命令后可以看出   LIMIT  500MiB成功

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
290255fe3161        inspiring_brown     0.00%               1.918MiB / 500MiB   0.38%               2.89kB / 0B         1.61MB / 0B         1

进行内存压力测试
容器内安装
安装stress
apt-get update
apt install -y stress

运行命令  使用1个IO进程,10个内存分配进程,每次分配100M,分配后不释放,测试100S
stress -i 1 -m 10 –vm-bytes 100M –vm-hang 100  –timeout 100s

命令运行前  内存使用 1.82MiB / 500MiB
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
c3db20ece882        festive_blackburn   0.00%               1.82MiB / 500MiB    0.36%               2.51MB / 33.7kB     1.88MB / 2.42GB     1

命令使用后  499.9MiB / 500MiB
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
c3db20ece882        festive_blackburn   12.20%              499.9MiB / 500MiB   99.97%              2.51MB / 33.7kB     393kB / 1.22GB      13

测试成功
如果进入容器会发现,容器内内存显示仍为主机的内存大小,这个无所谓

二,CPU 限制

进行cpu压力测试 计算圆周率
apt-get update

apt install bc

echo "scale=50000; 4*a(1)" | bc -l -q

以下方式是不指定CPU 所以看不出权限的作用
第一个 container
docker run -it -c 1024 reg.ccie.wang/test/ubuntu:sshd001 /bin/bash
第二个 container
docker run -it -c 512 reg.ccie.wang/test/ubuntu:sshd001 /bin/bash
第3个 container
docker run -it -c 512 reg.ccie.wang/test/ubuntu:sshd001 /bin/bash

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT    MEM %               NET I/O             BLOCK I/O           PIDS
5b9c706e650d        lucid_babbage       99.65%              4.742MiB / 7.79GiB   0.06%               2.57MB / 33.3kB     1.09MB / 21.9MB     2

 

2个容器对应 两个CPU 100%  三个对应三个
top – 14:11:25 up 9 days, 22:39,  3 users,  load average: 1.28, 0.41, 0.15
Tasks: 174 total,   3 running, 171 sleeping,   0 stopped,   0 zombie
%Cpu0  : 99.7 us,  0.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  1.0 us,  0.7 sy,  0.0 ni, 95.8 id,  0.0 wa,  0.0 hi,  2.6 si,  0.0 st
%Cpu2  :  0.7 us,  1.0 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7976.8 total,   1231.0 free,   1707.2 used,   5038.7 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   5977.2 avail Mem

-c,–cpu-shares=0    CPU 共享权值(相对权重)
–cpuset-cpus=""    允许使用的 CPU 集,值可以为 0-3,0,1

测试2 限制 容器只能使用CPU 1 并且三个容器 按权重分配使用率

1配置 :docker run -it –cpuset-cpus 1 -c 1024 reg.ccie.wang/test/ubuntu:sshd001 /bin/bash
2配置 :docker run -it –cpuset-cpus 1 -c 512 reg.ccie.wang/test/ubuntu:sshd001 /bin/bash
3配置 :docker run -it –cpuset-cpus 1 -c 512 reg.ccie.wang/test/ubuntu:sshd001 /bin/bash

container 1  权重1024  理论上最大占50%
container 2  权重512   理论上最大占50% 的一半
container 3  权重512   理论上最大占50% 的一半

计算方式理解决 1+2+3 应等于100
1=2*2
1=3*2

在host上查看top  cpu跑满
%Cpu1  : 99.7 us,  0.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

查看运行中的三个 container
docker stats cf3388f91e18 2e7e91f901a2 48b30cb94410
结果如下,证明限制是有效的
CONTAINER ID        NAME                 CPU %               MEM USAGE / LIMIT    MEM %               NET I/O             BLOCK I/O           PIDS
cf3388f91e18        trusting_bassi       25.02%              3.25MiB / 7.79GiB    0.04%               2.57MB / 28.1kB     0B / 21.8MB         2
2e7e91f901a2        suspicious_bardeen   25.47%              3.227MiB / 7.79GiB   0.04%               2.59MB / 44kB       0B / 21.8MB         2
48b30cb94410        distracted_lamport   49.88%              3.027MiB / 7.79GiB   0.04%               2.6MB / 40.2kB      0B / 21.8MB         2
^C

 

警告解决
1. vim /etc/default/grub   增加配置
#docker add support cgroup
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
2.  $ sudo update-grub  更新grub
3.  重启服务生效
https://docs.docker.com/v17.09/engine/installation/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities

root@docker:~# update-grub
Generating grub configuration file …
Found linux image: /boot/vmlinuz-4.18.0-16-generic
Found initrd image: /boot/initrd.img-4.18.0-16-generic
Found linux image: /boot/vmlinuz-4.18.0-15-generic
Found initrd image: /boot/initrd.img-4.18.0-15-generic
Found linux image: /boot/vmlinuz-4.18.0-10-generic
Found initrd image: /boot/initrd.img-4.18.0-10-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done
root@docker:~#

————-报错
WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

警告解决
1. vim /etc/default/grub   增加配置
#docker add support cgroup
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
2.  $ sudo update-grub  更新grub
3.  重启服务生效
https://docs.docker.com/v17.09/engine/installation/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities

 

Docker 提供的内存限制功能有以下几点:

容器能使用的内存和交换分区大小。
容器的核心内存大小。
容器虚拟内存的交换行为。
容器内存的软性限制。
是否杀死占用过多内存的容器。
容器被杀死的优先级
一般情况下,达到内存限制的容器过段时间后就会被系统杀死

内存限制相关的参数
执行docker run命令时能使用的和内存限制相关的所有选项如下。

选项    描述
-m,–memory    内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为 4M
–memory-swap    内存+交换分区大小总限制。格式同上。必须必-m设置的大
–memory-reservation    内存的软性限制。格式同上
–oom-kill-disable    是否阻止 OOM killer 杀死容器,默认没设置
–oom-score-adj    容器被 OOM killer 杀死的优先级,范围是[-1000, 1000],默认为 0
–memory-swappiness    用于设置容器的虚拟内存控制行为。值为 0~100 之间的整数
–kernel-memory    核心内存限制。格式同上,最小为 4M

CPU 限制
概述
Docker 的资源限制和隔离完全基于 Linux cgroups。对 CPU 资源的限制方式也和 cgroups 相同。Docker 提供的 CPU 资源限制选项可以在多核系统上限制容器能利用哪些 vCPU。而对容器最多能使用的 CPU 时间有两种限制方式:一是有多个 CPU 密集型的容器竞争 CPU 时,设置各个容器能使用的 CPU 时间相对比例。二是以绝对的方式设置容器在每个调度周期内最多能使用的 CPU 时间。

CPU 限制相关参数
docker run命令和 CPU 限制相关的所有选项如下:

选项    描述
–cpuset-cpus=""    允许使用的 CPU 集,值可以为 0-3,0,1
-c,–cpu-shares=0    CPU 共享权值(相对权重)
cpu-period=0    限制 CPU CFS 的周期,范围从 100ms~1s,即[1000, 1000000]
–cpu-quota=0    限制 CPU CFS 配额,必须不小于1ms,即 >= 1000
–cpuset-mems=""    允许在上执行的内存节点(MEMs),只对 NUMA 系统有效
其中–cpuset-cpus用于设置容器可以使用的 vCPU 核。-c,–cpu-shares用于设置多个容器竞争 CPU 时,各个容器相对能分配到的 CPU 时间比例。–cpu-period和–cpu-quata用于绝对设置容器能使用 CPU 时间。

–cpuset-mems暂用不上,这里不谈。
———————
作者:流沙的刺客
来源:CSDN
原文:https://blog.csdn.net/candcplusplus/article/details/53728507
版权声明:本文为博主原创文章,转载请附上博文链接!

一看必会系列:docker 练习 5创建mysql容器

No Comments Docker

 

 

$ docker run –name jeffmysql001 \
-v /opt/dockerfile/mysql_5.7/data:/var/lib/mysql \
-v /opt/dockerfile/mysql_5.7/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=xxx \
-P -d reg.ccie.wang/library/mysql:5.7
 
 
root@docker:/opt/dockerfile/mysql_5.7# docker ps
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                                               NAMES
ee025d911e4c        reg.ccie.wang/library/mysql:5.7   "docker-entrypoint.s…"   23 seconds ago      Up 21 seconds       0.0.0.0:32802->3306/tcp, 0.0.0.0:32801->33060/tcp   jeffmysql001

连接测试
mysql -h localhost -P 32802 -u root -p
 
用同主机的容器进行测试
root@docker:~# docker run -it busybox

出现乱码即为正常
/ # telnet 192.169.110.3 3306
J
5.7.25|D&R%(iKm[18V“OfCmysql_native_passwordConnection closed by foreign host

 
执行命令,有输出即为正常
show PROCESSLIST

修改默认信息
$ docker run -it –link some-mysql:mysql –rm mysql sh -c ‘exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"’

当客户端使用,端口要确认不要搞错了
# docker run -it –rm reg.ccie.wang/library/mysql:5.7 mysql -h"192.168.10.67" -uroot -p -P 32804

Server version: 5.7.25 MySQL Community Server (GPL)

mysql> show processlist
    -> ;
+—-+——+———————+——+———+——+———-+——————+
| Id | User | Host                | db   | Command | Time | State    | Info             |
+—-+——+———————+——+———+——+———-+——————+
|  3 | root | 192.169.110.1:37030 | NULL | Query   |    0 | starting | show processlist |
+—-+——+———————+——+———+——+———-+——————+
1 row in set (0.00 sec)

https://hub.docker.com/_/mysql

一看必会系列:dockerfile 练习4 jenkins docker创建

No Comments Docker

mkdir -p /opt/dockerfile/centos_jenkins

docker pull  jenkins:2.60.3

docker run -p 8080:8080 -p 50000:50000 -v /opt/dockerfile/centos_jenkins:/var/jenkins_home jenkins:2.60.3

# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS            
f15b3dea0bc7        jenkins:2.60.3      "/bin/tini — /usr/l…"   About a minute ago   Up About a minute
PORTS                                               NAMES
0.0.0.0:32798->8080/tcp, 0.0.0.0:32797->50000/tcp   suspicious_tharp

进入容器读取信息
root@docker:/opt/dockerfile/centos_jenkins# docker exec -it f15b3dea0bc7 /bin/bash
jenkins@f15b3dea0bc7:/$

访问 http://192.168.10.67:32798/login?from=%2F

读取管理密码
jenkins@f15b3dea0bc7:/$ cat /var/jenkins_home/secrets/initialAdminPassword
a642a5e7ca8b422196f71adb349aa48d

jenkins docker 容器里如何升级、
1。
下载最新包 https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.164.1/jenkins.war
2.停止容器
docker stop id
3.换更新包
复制jenkins.war  到容器的jenkins目录
docker cp jenkins.war f15b3dea0bc7:/usr/share/jenkins/jenkins.war
4.启动容器
docker start f15b3dea0bc7
f15b3dea0bc7
root@docker:/opt/dockerfile# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS            
f15b3dea0bc7        jenkins:2.60.3      "/bin/tini — /usr/l…"   31 minutes ago      Up 15 seconds  
PORTS                                               NAMES   
0.0.0.0:32800->8080/tcp, 0.0.0.0:32799->50000/tcp   suspicious_tharp
5.完成

 

报错

root@docker:/opt/dockerfile# docker run -P -v /opt/dockerfile/centos_jenkins:/var/jenkins_home jenkins:2.60.3
touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
root@docker:/opt/dockerfile# ll /opt/dockerfile/centos_jenkins
total 8
drwxr-xr-x 2 jenkins jenkins 4096 3月  15 18:02 ./
drwxr-xr-x 6 root    root    4096 3月  15 18:02 ../
root@docker:/opt/dockerfile#

解决
useradd jenkins 
chown jenkins:jenkins -R centos_jenkins

依然报同样的错。说明权限还是不够
改成
sudo chown -R 1000:1000 /opt/jenkins
修复成功

原因在这里
Dockerfile 里有一段这个  UID GID 为1000.容器USER 和主机USER不能对等所以用 id就可以解决
ARG user=jenkins
ARG group=jenkins
ARG uid=1000
ARG gid=1000

https://hub.docker.com/_/jenkins?tab=description

一看必会系列:jenkins docker 容器升级jenkins版本

No Comments Docker

jenkins docker 容器里如何升级、
1。
下载最新包 https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.164.1/jenkins.war
2.停止容器
docker stop id
3.换更新包
复制jenkins.war  到容器的jenkins目录
docker cp jenkins.war f15b3dea0bc7:/usr/share/jenkins/jenkins.war
4.启动容器
docker start f15b3dea0bc7
f15b3dea0bc7
root@docker:/opt/dockerfile# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS            
f15b3dea0bc7        jenkins:2.60.3      "/bin/tini — /usr/l…"   31 minutes ago      Up 15 seconds  
PORTS                                               NAMES   
0.0.0.0:32800->8080/tcp, 0.0.0.0:32799->50000/tcp   suspicious_tharp
5.完成

一看必会系列:dockerfile 练习3 继承方式创建apache镜像

No Comments Docker

 

目录
../ubuntu_apache/
├── dockerfile
├── html
│   └── index.html
└── run.sh

相关文件内容
1.dockerfile
FROM reg.ccie.wang/test/ubuntu:sshd001  #继承前面做的镜像,已经包含sshd
MAINTAINER docker_user_jeff
ENV DEBIAN FRONTEND noninteractive
RUN apt-get -yq install apache2&&\
    rm -rf /var/lib/apt/lists/*
ADD run.sh /run.sh
RUN chmod 755 /*.sh
RUN mkdir -p /var/lock/apache2 &&mkdir -p /app &&\
    rm -fr /var/www/html && \
    ln -s /app /var/www/html &&\
    mkdir -p /var/run/apache2
COPY html/ /app/
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_SERVERNAME localhost
ENV APACHE_SERVERALIAS docker.localhost
ENV APACHE_DOCUMENTROOT /var/www
ENV APACHE_LOCK_DIR /var/lock/apache2

EXPOSE 80
WORKDIR /app
CMD ["/run.sh"]

2.run.sh
#!/bin/bash
#启动sshd
/usr/sbin/sshd &  
#启动 apache2
exec apache2 -D FOREGROUND

3. index.html
<h1>docker ubuntu_apache by jeff</h1>

建立镜像
docker build -t apache:ubuntu004 .

查看镜像
docker images |grep 004
apache                            ubuntu004           6197aa3de935        6 minutes ago       280MB

启动并查看 环境是否正确
docker run -it –rm apache:ubuntu004 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=aad3a9045a75
TERM=xterm
DEBIAN=FRONTEND noninteractive
APACHE_RUN_USER=www-data
APACHE_RUN_GROUP=www-data
APACHE_LOG_DIR=/var/log/apache2
APACHE_PID_FILE=/var/run/apache2.pid
APACHE_RUN_DIR=/var/run/apache2
APACHE_SERVERNAME=localhost
APACHE_SERVERALIAS=docker.localhost
APACHE_DOCUMENTROOT=/var/www
APACHE_LOCK_DIR=/var/lock/apache2
HOME=/root

 

创建容器  并将容器内80端口映射到主机的 8081
# docker run -itd -p 8082:80 -p 18081:22 reg.ccie.wang/test/ubuntu:apache2.4.29 /run.sh
176ae6ea0ebbc1c8707576cece1a0265cf2b52839f1ec37fb9d7b0281a967a2e

# docker ps
CONTAINER ID        IMAGE                                    COMMAND              CREATED             STATUS              PORTS                                         NAMES
176ae6ea0ebb        reg.ccie.wang/test/ubuntu:apache2.4.29   "/run.sh"            4 seconds ago       Up 2 seconds        0.0.0.0:18081->22/tcp, 0.0.0.0:8082->80/tcp   condescending_noyce

回主机测试 8081服务是否正常
# curl localhost:8081
<h1>docker ubuntu_apache by jeff</h1>
#以上结果为正常

查看安装apache2产生的可回收文件

root@89bcf36427d7:/# du -h –max-depth=1 /var/lib/apt/lists/
4.0K    /var/lib/apt/lists/partial
4.0K    /var/lib/apt/lists/auxfiles
24M    /var/lib/apt/lists/

删除减少镜像
root@89bcf36427d7:/# rm -rf /var/lib/apt/lists/*
root@89bcf36427d7:/#
root@89bcf36427d7:/#
root@89bcf36427d7:/# du -h –max-depth=1 /var/lib/apt/lists/
8.0K    /var/lib/apt/lists/
root@89bcf36427d7:/#

报错   docker写的有问题  值 没有传入镜像 已更正

# docker run -it –rm apache:ubuntu002 /run.sh
apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot

一看必会系列:dockerfile 练习2 创建apache镜像

No Comments Docker

 

新建目录及文件
/opt/dockerfile/httpd_2.4
├── httpd_2.4
│   ├── dockerfile
│   ├── httpd.conf
│   └── public-html
│       └── index.html

index.html 内容
<h1>jeff dockerfile apache</h1>

dockerfile 内容
FROM httpd:2.4   #基础镜像名
COPY ./public-html/ /usr/local/apache2/htdocs/  #复制目录文件到 容器内目录

生成镜像
root@docker:/opt/dockerfile/httpd_2.4# docker build -t httpd_jeff:1.0.0 .
Sending build context to Docker daemon  26.11kB
Step 1/2 : FROM httpd:2.4
—> 2d1e5208483c
Step 2/2 : COPY ./public-html/ /usr/local/apache2/htdocs/
—> 46af319543cf
Successfully built 46af319543cf
Successfully tagged httpd_jeff:1.0.0

验证镜像
root@docker:/opt/dockerfile/httpd_2.4# docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
httpd_jeff                        1.0.0               46af319543cf        8 minutes ago       132MB

运行镜像  -i 交互模式 -t 伪终端 -d 后台运行
root@docker:/opt/dockerfile/httpd_2.4# docker run -itd  –name httpd_jeff -p 8080:80 httpd_jeff:1.0.0
504df67c3fecea806c39338c82f4440e4797b79e9cad6d332da1750ec6e63fc0

root@docker:/opt/dockerfile/httpd_2.4# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
504df67c3fec        httpd_jeff:1.0.0    "httpd-foreground"   5 seconds ago       Up 3 seconds        0.0.0.0:8080->80/tcp   httpd_jeff

验证
root@docker:/opt/dockerfile/httpd_2.4# curl 192.168.10.67:8080
<h1>jeff dockerfile apache</h1>
以上信息为正常

 

报错解决
root@docker:/opt/dockerfile/httpd_2.4# docker run -it –rm –name my-running-app -p 8081:80 apache2.4-images:001
AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 192.169.110.10. Set the ‘ServerName’ directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 192.169.110.10. Set the ‘ServerName’ directive globally to suppress this message
[Thu Mar 14 04:10:23.728775 2019] [mpm_event:notice] [pid 1:tid 139725533614144] AH00489: Apache/2.4.38 (Unix) configured — resuming normal operations
[Thu Mar 14 04:10:23.728982 2019] [core:notice] [pid 1:tid 139725533614144] AH00094: Command line: ‘httpd -D FOREGROUND’
[Thu Mar 14 04:10:23.821551 2019] [mpm_event:notice] [pid 1:tid 139725533614144] AH00492: caught SIGWINCH, shutting down gracefully

修改

root@c76876b5237f:/usr/local/apache2# sed -i "s/#ServerName www.example.com:80/ServerName 0.0.0.0:80/g" /usr/local/apache2/conf/httpd.conf
root@c76876b5237f:/usr/local/apache2# !c
cat conf/httpd.conf |grep Name
# ServerName gives the name and port that the server uses to identify itself.
ServerName 0.0.0.0:80
root@c76876b5237f:/usr/local/apache2#

root@docker:/opt/dockerfile/httpd_2.4# docker run -it –rm –name my-running-app -p 8081:80 apache2.4-images:003[Thu Mar 14 04:12:06.933813 2019] [mpm_event:notice] [pid 1:tid 139627409084480] AH00489: Apache/2.4.38 (Unix) configured — resuming normal operations
[Thu Mar 14 04:12:06.933976 2019] [core:notice] [pid 1:tid 139627409084480] AH00094: Command line: ‘httpd -D FOREGROUND’
[Thu Mar 14 04:12:07.022337 2019] [mpm_event:notice] [pid 1:tid 139627409084480] AH00492: caught SIGWINCH, shutting down gracefully

 

停止所有容器
  docker stop $(docker ps|awk ‘{print $1}’)
删除所有容器
docker rm $(docker ps -a|awk ‘{print $1}’)
删除所有镜像
docker rmi -f $(docker images |grep dockerfile|awk ‘{print $3}’)

 

https://hub.docker.com/_/httpd?tab=description

一看必会系列:dockerfile 练习一 创建支持sshd 的ubuntu镜像

No Comments Docker

dockerfile 创建支持sshd 的ubuntu镜像

先建目录

root@docker:/opt/dockerfile/ubuntu_sshd# !t
tree ../
../
└── ubuntu_sshd
    ├── AZURE-FAT-OPS-PRI
    ├── dockerfile
    └── run.sh

dockfile的内容

root@docker:/opt/dockerfile/ubuntu_sshd# cat dockerfile
FROM reg.ccie.wang/library/ubuntu:18.04
MAINTAINER jeff@jdccie.com
RUN sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list #替换本地原
RUN apt-get update
RUN apt-get install -y openssh-server   #安装sshd
RUN mkdir /var/run/sshd                   #需要建议目录不然无法启动
RUN mkdir /root/.ssh
RUN useradd jeff001                      #新建用户
RUN echo jeff001:111111 | chpasswd       #修改密码
ADD run.sh /run.sh                       #增加脚本启动 sshd
RUN chmod 755 /run.sh                    #修改执行权限
EXPOSE 22                                #容器暴露 22端口

启动执行脚本的网容
root@docker:/opt/dockerfile/ubuntu_sshd# cat run.sh
#!/bin/bash
/usr/sbin/sshd -D

在docker同目录下build
docker build -t sshd:dockerfile004 .

查看生成的镜像
root@docker:/opt/dockerfile/ubuntu_sshd# docker images |grep dockerfile
sshd                              dockerfile004       c4b27b86c0b8        5 minutes ago       228MB
sshd                              dockerfile003       74213a63a585        18 minutes ago      228MB
sshd                              dockerfile002       4981e935d5df        38 minutes ago      228MB
sshd                              dockerfile001       1a767dd4e3e2        About an hour ago   228MB
root@docker:/opt/dockerfile/ubuntu_sshd#

运行  将容器的22号映射到host的12224端口
docker run -p 12224:22 -d sshd:dockerfile004  /run.sh
 
root@docker:/opt/dockerfile/ubuntu_sshd# docker ps |grep dockerfile
c68fbed21f8b        sshd:dockerfile004                   "/run.sh"                3 minutes ago       Up 3 minutes        0.0.0.0:12224->22/tcp   optimistic_curie

测试是否能ssh   ssh 用户@主机IP ssh端口
ssh jeff001@192.168.10.67 12224

提示如下即成功
Connecting to 192.168.10.67:12224…
Connection established.
To escape to local shell, press ‘Ctrl+Alt+]’.

WARNING! The remote SSH server rejected X11 forwarding request.
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.18.0-16-generic x86_64)

测试成功

推送镜像到 仓库
#标记成仓库相关的  docker tag SOURCE_IMAGE[:TAG] reg.ccie.wang/test/IMAGE[:TAG]
docker tag sshd:dockerfile004 reg.ccie.wang/test/ubuntu:sshd001
#推镜像到仓库    docker push reg.ccie.wang/test/IMAGE[:TAG]
docker push reg.ccie.wang/test/ubuntu:sshd001
The push refers to repository [reg.ccie.wang/test/ubuntu]
e8606e3e9f2b: Preparing

denied: requested access to the resource is denied   #说明没有登陆或没有权限。

先登陆到仓库
root@docker:/opt/dockerfile/ubuntu_sshd# sh +x /root/login.sh
WARNING! Using –password via the CLI is insecure. Use –password-stdin.
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@docker:/opt/dockerfile/ubuntu_sshd# docker push reg.ccie.wang/test/ubuntu:sshd001
The push refers to repository [reg.ccie.wang/test/ubuntu]
e8606e3e9f2b: Pushed
638b4a9375b3: Pushed
38f2771441e5: Pushed
d41a6372b93f: Pushed
992b79b09792: Pushed
d76a7595b8f4: Pushed
03e5cb7ca68f: Pushed
23f382505b40: Pushed
4b7d93055d87: Pushed
663e8522d78b: Pushed
283fb404ea94: Pushed
bebe7ce6215a: Pushed
sshd001: digest: sha256:5c60c99a4d59a40dafe5dfe26a37679804e1d2d09ec90bbe975e5abd2a5c0361 size: 3024

以上为推送成功

拉取镜像测试
1.删除现有镜像

docker rmi reg.ccie.wang/test/ubuntu:sshd001
Untagged: reg.ccie.wang/test/ubuntu:sshd001
Untagged: reg.ccie.wang/test/ubuntu@sha256:5c60c99a4d59a40dafe5dfe26a37679804e1d2d09ec90bbe975e5abd2a5c0361
以上为成功

2.从仓库拉取镜像  docker pull reg.ccie.wang/test/ubuntu:sshd001

root@docker:/opt/dockerfile/ubuntu_sshd# docker pull reg.ccie.wang/test/ubuntu:sshd001
sshd001: Pulling from test/ubuntu
Digest: sha256:5c60c99a4d59a40dafe5dfe26a37679804e1d2d09ec90bbe975e5abd2a5c0361
Status: Downloaded newer image for reg.ccie.wang/test/ubuntu:sshd001

验证是否成功
root@docker:/opt/dockerfile/ubuntu_sshd# docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
reg.ccie.wang/test/ubuntu         sshd001             c4b27b86c0b8        14 hours ago        228MB

使用该镜像生成容器
#
docker run -p 12225:22 -d reg.ccie.wang/test/ubuntu:sshd001  /run.sh
7ae5fd70960dc933c1f98106a360da3f14c5e93d7cd17bce0f896f69f041fc67
#验证
root@docker:/opt/dockerfile/ubuntu_sshd# docker ps |grep sshd001
7ae5fd70960d        reg.ccie.wang/test/ubuntu:sshd001    "/run.sh"                10 seconds ago      Up 7 seconds        0.0.0.0:12225->22/tcp   happy_albattani
以上信息为成功

也可把当前容器打包一个镜像文件docker commit  容器ID 新TAG

# docker commit 7ae5fd70960d ubuntu:sshd002
sha256:a9c6f22446466cbf920d5e22f95e0d378558d3852a3bc1592a701d78777ba222

验证
root@docker:/opt/dockerfile/ubuntu_sshd# docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
ubuntu                            sshd002             a9c6f2244646        5 seconds ago       228MB