30选5玩法|福彩30选5开奖结果321|
 

分类:Docker

一看必会系列:docker 实战14 docker国内镜像加速推荐

No Comments Docker

 

用了很多源,这个飞一样的速度,注意要注册帐号。

 

https://www.daocloud.io/mirror#accelerator-doc

 

配置 Docker 加速器
Linux
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
该脚本可以将 –registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json ?#23567;?#36866;用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同。更多详情请访问文档。

macOS
Docker For Mac

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

右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中加入下面的镜像地址:

http://f1361db2.m.daocloud.io
点击 Apply & Restart 按钮使设置生效。

Docker Toolbox 等配置方法请参考帮助文档。

Windows
Docker For Windows

在桌面右下角状态栏中右键 docker 图标,修改在 Docker Daemon 标签页中的 json ,把下面的地址:

http://f1361db2.m.daocloud.io
加到" registry-mirrors"的数组里。点击 Apply 。

Docker Toolbox 等配置方法请参考帮助文档。

一看必会系列:docker 实战 12 docker部署jenkins及jenkins迁移方法

No Comments Docker

 

迁移

进jenkins服务器目录
/var/lib/jenkins/
打包jobs文件目录
tar -cvzf jenkins01.job.tar.gz jobs

#迁移的时候可以直接将jenkins主目录数据整个拷贝过去,
#也可以单独拷贝jenkins主目录下的config.xml文件以及jobs、users、workspace、plugins四个目录
#(这是主要?#37027;?#31227;数据)。一般来说,手动设置好jenkins主目录路径,启动jenkins后就会自动生成
#(但要确保jenkins用户有权限创建这个主目录,最好是提前手动创建并赋予jenkins启动用户的权限)

传到目的服务器
scp -i AZURE-OPS-PRIVATE /var/lib/jenkins/jenkins01.job.tar.gz  [email protected]:/tmp/

在容器服务器
1.创建目录
mkdir -p /data/service/jenkins02
2.授权。不然会报错
chown 1000:1000 -R /data/service/jenkins02
3.创建容器
docker run -itd -p 8082:8080 -p 50000:50000 \
–name jenkins02 \
–restart always \
-v /data/service/jenkins02:/var/jenkins_home \
-v /data/service/jenkins02/opt/script:/opt/script \
jenkins:2.19.2  #版本尽量相同不然会有问题
4.
验证并登陆
http://主机IP:8082

获取初始密码,可以进主机的对应目录
进容器内目录
/var/jenkins_home/secrets/initialAdminPassword

5.进入系统后点
异常状态:系统管理–>读取配置–>重启 没出现刚还原的jobs
正常状态:系统管理–>读取配置–>重启 出现刚还原的jobs

———-报错
[[email protected] service]# docker run -p 8082:8080 -p 50000:50000 -v /data/service/jenkins02:/var/jenkins_home jenkins
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?

解决
chown 1000:1000 -R /data/service/jenkins02

如果装了这个插件是没法迁移的。
Manage and Assign Roles

一看必会系列:docker 练习 11 docker部署gitlab及gitlab迁移方法

No Comments Docker

gitlab docker安装

前提
关闭selinux:
# sed -i ‘s/enforcing/disabled/’ /etc/selinux/config
# setenforce 0
关闭swap:
# swapoff -a  # 临时
# vim /etc/fstab  # 永久
同步时间:
# yum install ntpdate -y
# ntpdate  ntp.api.bz

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
yum install docker-ce-17.03.3.ce -y
如果提示container-selinux依赖问题,先安装ce-17.03匹配版本:
# yum localinstall https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm
# Step 4: 开启Docker服务
# systemctl enable docker && systemctl start docker

# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.03.3-ce   #版本信息

部署容器
sudo docker run –detach \
  –hostname git03.jdccie.com \
  –publish 4430:443 –publish 803:80 –publish 223:22 \
  –name gitlab03 \
  –restart always \
  –volume /data/service/gitlab/config:/etc/gitlab \
  –volume /data/service/gitlab/logs:/var/log/gitlab \
  –volume /data/service/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest
 
–restart 标志会检查容器的退出代码,并据此来决定是否要重启容器,默认是不会重启。
–restart的?#38382;?#35828;明
always:无论容器的退出代码是什么,Docker都会自动重启该容器。
on-failure:只有当容器的退出代码为非0?#26723;?#26102;候才会自动重启。另外,该?#38382;?#36824;接受一个可选的重启?#38382;问?
–restart=on-fialure:5`表?#38236;?#23481;器退出代码为非0时,Docker会尝试自动重启该容器,最多5次。

 
验证
[email protected]:~# docker ps
CONTAINER ID        IMAGE                                    COMMAND                                 
PORTS                                                             NAMES
b4a6652f3a4d        gitlab/gitlab-ce:latest                  "/assets/wrapper"         
0.0.0.0:223->22/tcp, 0.0.0.0:803->80/tcp, 0.0.0.0:4430->443/tcp   gitlab03

目录说明
Local location    Container location    Usage
/srv/gitlab/data    /var/opt/gitlab    For storing application data
/srv/gitlab/logs    /var/log/gitlab    For storing logs
/srv/gitlab/config    /etc/gitlab    For storing the GitLab configuration files

 

#gitlab 迁移及恢复数据
1.容器外复制备份文件到 logs目录
cp ../15531jdccie.com_2019_03_21_10.7.3_gitlab_backup.tar logs/
2.
docker exec -it a622702ec855 /bin/bash
[email protected]:/#
3. 容器内
[email protected]:/var/log/gitlab# cp 15531jdccie.com_2019_03_21_10.7.3_gitlab_backup.tar /var/opt/gitlab/backups
4. 修改权限
chmod 666 15531jdccie.com_2019_03_21_10.7.3_gitlab_backup.tar
5  恢复数据
gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=15531jdccie.com_2019_03_21_10.7.3
其中有两处需要 输入yes,注意一下
Do you want to continue (yes/no)? yes

5 。修改 project的域名信息
修?#37027;癶ttp://1.1.1.1/root/git03.git
修改后
http://git03.jdccie.com:803/root/git03.git

修改方法
1.进容器
2.在容器里修改
vim /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

修改内容
  gitlab:
    ## Web server settings (note: host is the FQDN, do not include http://)
    host: git03.jdccie.com:803   #这时取巧了。因为容器对外的端口是803但容器内的端口是80所以改成这样
    port: 80                     #这个不要动,会启不动,当然也有另外的方法看最后
    https: false

3.在容器里重启
gitlab-ctl restart

访问验证即可

———-其它信息

如果在selinux环境用以下命令
sudo docker run –detach \
  –hostname gitlab.example.com \
  –publish 443:443 –publish 80:80 –publish 22:22 \
  –name gitlab \
  –restart always \
  –volume /srv/gitlab/config:/etc/gitlab:Z \
  –volume /srv/gitlab/logs:/var/log/gitlab:Z \
  –volume /srv/gitlab/data:/var/opt/gitlab:Z \
  gitlab/gitlab-ce:latest
 
 
sudo docker exec -it gitlab /bin/bash

You can also just edit /etc/gitlab/gitlab.rb:

sudo docker exec -it gitlab vi /etc/gitlab/gitlab.rb

Once you open /etc/gitlab/gitlab.rb make sure to set the external_url to point to a valid URL.

To receive e-mails from GitLab you have to configure the SMTP settings because the GitLab Docker image doesn’t have an SMTP server installed.

You may also be interested in Enabling HTTPS.

After you make all the changes you want, you will need to restart the container in order to reconfigure GitLab:

sudo docker restart gitlab

升级新版本

1 sudo docker stop gitlab
2 sudo docker rm gitlab
3 sudo docker pull gitlab/gitlab-ce:latest
4 sudo docker run –detach \
–hostname gitlab.example.com \
–publish 443:443 –publish 80:80 –publish 22:22 \
–name gitlab \
–restart always \
–volume /srv/gitlab/config:/etc/gitlab \
–volume /srv/gitlab/logs:/var/log/gitlab \
–volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
 
 
这里可以直接改域名信息
Create a docker-compose.yml file (or download an example):

web:
   image: ‘gitlab/gitlab-ce:latest’
   restart: always
   hostname: ‘gitlab.example.com’
   environment:
     GITLAB_OMNIBUS_CONFIG: |
       external_url ‘https://gitlab.example.com’
       # Add any other gitlab.rb configuration here, each on its own line
   ports:
     – ’80:80′
     – ‘443:443’
     – ’22:22′
   volumes:
     – ‘/srv/gitlab/config:/etc/gitlab’
     – ‘/srv/gitlab/logs:/var/log/gitlab’
     – ‘/srv/gitlab/data:/var/opt/gitlab’
 
 
———-报错

"couldn’t deduce an advertise address: no private IP found, explicit advertise addr not provided"

#恢复报错
Unpacking backup … tar: 15531jdccie.com_2019_03_21_10.7.3_gitlab_backup.tar: Cannot open: Permission denied

处理方式 修改权限
[email protected]:/var/opt/gitlab/backups# ll
total 430188
drwx——.  2 git  root      4096 Mar 21 06:03 ./
drwxr-xr-x. 19 root root      4096 Mar 21 04:52 ../
-rw——- #原来的权限.  1 root root 440504320 Mar 21 06:03 15531jdccie.com_2019_03_21_10.7.3_gitlab_backup.tar
[email protected]:/var/opt/gitlab/backups# chmod 666 15531jdccie.com_2019_03_21_10.7.3_gitlab_backup.tar
[email protected]:/var/opt/gitlab/backups# ll
total 430188
drwx——.  2 git  root      4096 Mar 21 06:03 ./
drwxr-xr-x. 19 root root      4096 Mar 21 04:52 ../
-rw-rw-rw-#修改后的.  1 root root 440504320 Mar 21 06:03 15531jdccie.com_2019_03_21_10.7.3_gitlab_backup.tar

[email protected]:/var/opt/gitlab/backups# gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=15531jdccie.com_2019_03_21_10.7.3                                                                              
Unpacking backup … done
GitLab version mismatch:
  Your current GitLab version (11.8.3) differs from the GitLab version in the backup!
  Please switch to the following version and try again:
  version: 10.7.3

[[email protected] logs]# docker pull gitlab/gitlab-ce:10.7.3-ce.0

?#22659;?#21407;容器后,创建新容器报错
Error response from daemon: service endpoint with name gitlab03 already exists

原因,是容器被删了。但网络?#21152;?#20173;在?#21152;?
解决
1.确认?#22659;?#23481;器  docker rm -f 容器ID
2.确认容器使用的网络也被?#22659;?
docker network inspect 网络模式
3.强制断开该网络 docker network disconnect –force 网络模式 xxx
docker network disconnect –force bridge gitlab03
4.验证 不出现gitlab03即可
[[email protected] ~]# docker network inspect bridge
5.重建容器即可

这是之前的信息
[[email protected] ~]# docker network inspect bridge
        "Name": "bridge",
                "Name": "gitlab03",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",

Error response from daemon: service endpoint with name already exists

No Comments Docker

?#22659;?#21407;容器后,创建新容器报错
Error response from daemon: service endpoint with name gitlab03 already exists

原因,是容器被删了。但网络?#21152;?#20173;在?#21152;?
解决
1.确认?#22659;?#23481;器  docker rm -f 容器ID
2.确认容器使用的网络也被?#22659;?
docker network inspect 网络模式
3.强制断开该网络 docker network disconnect –force 网络模式 xxx
docker network disconnect –force bridge gitlab03
4.验证 不出现gitlab03即可
[[email protected] ~]# docker network inspect bridge
5.重建容器即可

这是之前的信息
[[email protected] ~]# docker network inspect bridge
        "Name": "bridge",
                "Name": "gitlab03",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",

docker 练习 10 docker容器nginx &mysql& wordpress实战lnmp

No Comments Docker

 

先运行一个测试容器,做准备脚?#38236;?#19996;西

1新建容器
[email protected]:~# docker run -it –volumes-from /dbata  reg.ccie.wang/library/nginx:1.15.9 /bin/bash
2.将nginx 配置文件copy到 主机的目录
[email protected]:/# cp -a /etc/nginx/* /dbdata/
3.验证是否正确
[email protected]:/# ls /dbdata/
conf.d        koi-utf  mime.types  nginx.conf   uwsgi_params
fastcgi_params    koi-win  modules     scgi_params  win-utf

4.查看主机目录,并进入查看
[email protected]:~# docker inspect dbata |grep volumes
                "Source": "/var/lib/docker/volumes/59955b706aca5c81e18e30375d5f2993fb3119dfd9702fbb201b9cad4c09fab3/_data",

5.查看目录内容是否存在
[email protected]:~# ll /var/lib/docker/volumes/59955b706aca5c81e18e30375d5f2993fb3119dfd9702fbb201b9cad4c09fab3/_data
total 48
drwxr-xr-x 3 root root 4096 3月  19 18:23 ./
drwxr-xr-x 3 root root 4096 3月  19 18:16 ../
drwxr-xr-x 2 root root 4096 3月   5 12:34 conf.d/
-rw-r–r– 1 root root 1007 2月  26 22:13 fastcgi_params
-rw-r–r– 1 root root 2837 2月  26 22:13 koi-utf
-rw-r–r– 1 root root 2223 2月  26 22:13 koi-win
-rw-r–r– 1 root root 5231 2月  26 22:13 mime.types
lrwxrwxrwx 1 root root   22 2月  26 22:13 modules -> /usr/lib/nginx/modules
-rw-r–r– 1 root root  643 2月  26 22:13 nginx.conf
-rw-r–r– 1 root root  636 2月  26 22:13 scgi_params
-rw-r–r– 1 root root  664 2月  26 22:13 uwsgi_params
-rw-r–r– 1 root root 3610 2月  26 22:13 win-utf
[email protected]:~#

6.并文件copy到将要?#20197;?#30340;目录/opt/dockerfile/nginx_wordpress/etc/nginx
cp -a /var/lib/docker/volumes/59955b706aca5c81e18e30375d5f2993fb3119dfd9702fbb201b9cad4c09fab3/_data/* .
[email protected]:/opt/dockerfile/nginx_wordpress/etc/nginx# ll
total 48
drwxr-xr-x 3 root root 4096 3月  19 18:29 ./
drwxr-xr-x 3 root root 4096 3月  19 18:29 ../
drwxr-xr-x 2 root root 4096 3月   5 12:34 conf.d/
-rw-r–r– 1 root root 1007 2月  26 22:13 fastcgi_params
-rw-r–r– 1 root root 2837 2月  26 22:13 koi-utf
-rw-r–r– 1 root root 2223 2月  26 22:13 koi-win
-rw-r–r– 1 root root 5231 2月  26 22:13 mime.types
lrwxrwxrwx 1 root root   22 2月  26 22:13 modules -> /usr/lib/nginx/modules
-rw-r–r– 1 root root  643 2月  26 22:13 nginx.conf
-rw-r–r– 1 root root  636 2月  26 22:13 scgi_params
-rw-r–r– 1 root root  664 2月  26 22:13 uwsgi_params
-rw-r–r– 1 root root 3610 2月  26 22:13 win-utf
[email protected]:/opt/dockerfile/nginx_wordpress/etc/nginx#

正是开始

创建数据卷容器
docker run -it -v /dbdata –name dbata alpine

忘了数据库

1.先建数据库容器 并设置帐号等因为Wordpress要进行指定
docker run -itd -m 500M \
–volumes-from /dbata -v /opt/dockerfile/nginx_wordpress/mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=wp \
-e MYSQL_USER=wpuser \
-e MYSQL_PASSWORD=111111 \
–name mysql_wp  reg.ccie.wang/library/mysql:5.7

2.创建 docker  wordpress 指定name 为–name wp001 ,
docker run -itd -m 500M -p 8080:80  \
–link  mysql_wp:mysql_wp \
–volumes-from /dbata -v /opt/dockerfile/nginx_wordpress/data:/data \
-e WORDPRESS_DB_HOST=mysql_wp:3306 \     #这时host就?#24039;?#38754;的mysql名
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_NAME=wp \
-e WORDPRESS_DB_PASSWORD=111111\
–name wp001  reg.ccie.wang/library/wordpress:latest
 
3.再创建 nginx 进行关联
docker run -itd -m 500M -p 80:80 \
–volumes-from /dbata -v /opt/dockerfile/nginx_wordpress/etc/nginx:/etc/nginx \
–name nginx_wp –link wp001:wp001 reg.ccie.wang/library/nginx:1.15.9

一定要按上面的顺序

验证
[email protected]:/opt/dockerfile/nginx_wordpress# docker stats 628b3cc50f10

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
628b3cc50f10        nginx_wp            0.00%               2.668MiB / 500MiB   0.53%               3.69kB / 1.27kB     8.19kB / 0B         2

nginx容器增加配置文件

[email protected]:/opt/dockerfile/nginx_wordpress/etc/nginx/conf.d# cat jeff.conf
upstream wp {
   server  wp001:80;
}

server {
    listen 80;
    server_name 192.168.10.67;
  location / {
           client_max_body_size   3m;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass http://wp;
}}

进入容器刷新配置

[email protected]:/opt/dockerfile/nginx_wordpress/etc/nginx/conf.d# cd
[email protected]:~# docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                      NAMES
628b3cc50f10        reg.ccie.wang/library/nginx:1.15.9       "nginx -g ‘daemon of…"   9 minutes ago       Up 9 minutes        0.0.0.0:80->80/tcp         nginx_wp
c553107a4ec0        reg.ccie.wang/library/wordpress:latest   "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       0.0.0.0:8080->80/tcp       wp001
[email protected]:~# docker exec -it 628b3cc50f10 /bin/bash
[email protected]:/# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[email protected]:/# nginx -s reload
2019/03/19 10:44:16 [notice] 14#14: signal process started
[email protected]:/#

出来到其它机器上进行验证

[[email protected] ~]# curl http://192.168.10.67/wp-admin/setup-config.php
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta name="viewport" content="width=device-width" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="robots" content="noindex,nofollow" />
    <title>WordPress &rsaquo; Setup Configuration File</title>
    <link rel=’stylesheet’ id=’buttons-css’  href=’http://192.168.10.67/wp-includes/css/buttons.min.css?ver=5.1′ type=’text/css’ media=’all’ />

出现以上信息即为成功

一看必会系列:docker 练习 9 docker容器间快捷互相访问

No Comments Docker

容器间互相访问需要知道IP
需要
1.进入容器或使用 inspect
[email protected]:~# docker inspect 0bce7f78880f |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "192.169.110.4",
                    "IPAMConfig": null,
                    "IPAddress": "192.169.110.4",
[email protected]:~#

?#24674;址?#24335;使用  –link 会更方便
原理就是 创建容器时 会将 name与ip自动 写入容器的/etc/hosts列表

测试如下

1.创建一个叫 b11的容器
[email protected]:~# docker run -itd –name b11  busybox
5625fade077f39aae85049781b30e6eb9dd3c34a68cb61a2f451bb7fb0a746af
[email protected]:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
5625fade077f        busybox             "sh"                4 seconds ago       Up 2 seconds                                   b11
63a1c53f7504        cf00c586f612        "/bin/bash"         2 hours ago         Up 2 hours          0.0.0.0:32810->10091/tcp   blissful_hypatia

2.创建别一个容器 b12 并使用
–link 容器名:别名 
写入hosts

[email protected]:~# docker run -it –name b12 –link b11:b11  busybox
/ # cat /etc/hosts  #查看hosts内容
192.169.110.3    b11 5625fade077f   #将b11 和IP自动写入容器中
192.169.110.4    0bce7f78880f
/ # ping b11
PING b11 (192.169.110.3): 56 data bytes
64 bytes from 192.169.110.3: seq=0 ttl=64 time=0.132 ms
64 bytes from 192.169.110.3: seq=1 ttl=64 time=0.074 ms

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

No Comments Docker

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

先总结一下 三?#22336;?#24335;,哪种用的爽用哪种
1.建立本地数据卷  
2.直接将主机的目录 ?#20197;?#36827;容器
3.建立数据卷容器

第一种:建立本地数据卷
?#25925;?#35828;一下
[email protected]:~# docker volume create -d 名字 test
test

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

查看 数据卷 命令
[email protected]:~# docker volume ls
DRIVER              VOLUME NAME
local               test   —生成的数据卷
local               disk001
local               disk003

使用生成的数据卷  这个要注意 -v 后不?#23567;?” 和其它?#20197;?#21629;令不同
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 #

在主机的目录进行验证  两端一至为正常
[email protected]:/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  #正确

不过也有官方推荐的?#20197;?#26041;法 

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

第三种:

数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器?#20197;?。

首先,创建一个数据卷容器 dbdata, 并在其中创建一个数据卷?#20197;?#21040;/ dbdata:

[email protected]:~# 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
/ #

创建两个 要?#20197;?#30340;容器
[email protected]:~# docker run -it –volumes-from /dbdata –name db1 alpine
[email protected]:~# 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 中?#25105;?#20462;改/dbdata数据,其它容器都会被修改,可以理解为同一个盘

划重点,使用–volumes-from?#20197;兀?#25968;据卷容器可以不启动

介绍:

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

docker volume
除了 create ?#29992;?#20196;外, docker volume 还支持 inspect (查看详细信息)、 ls (列
出已有数据卷)、 pru口e (清理无用数据卷)、 rm (?#22659;?#25968;据卷)等

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

No Comments Docker

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

先总结一下 三?#22336;?#24335;,哪种用的爽用哪种
1.建立本地数据卷  
2.直接将主机的目录 ?#20197;?#36827;容器
3.建立数据卷容器

第一种:建立本地数据卷
?#25925;?#35828;一下
[email protected]:~# docker volume create -d 名字 test
test

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

查看 数据卷 命令
[email protected]:~# docker volume ls
DRIVER              VOLUME NAME
local               test   —生成的数据卷
local               disk001
local               disk003

使用生成的数据卷  这个要注意 -v 后不?#23567;?” 和其它?#20197;?#21629;令不同
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 #

在主机的目录进行验证  两端一至为正常
[email protected]:/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  #正确

第三种:

数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器?#20197;?。

首先,创建一个数据卷容器 dbdata, 并在其中创建一个数据卷?#20197;?#21040;/ dbdata:

[email protected]:~# 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
/ #

创建两个 要?#20197;?#30340;容器
[email protected]:~# docker run -it –volumes-from /dbdata –name db1 alpine
[email protected]:~# 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 中?#25105;?#20462;改/dbdata数据,其它容器都会被修改,可以理解为同一个盘

划重点,使用–volumes-from?#20197;兀?#25968;据卷容器可以不启动

介绍:

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

docker volume
除了 create ?#29992;?#20196;外, docker volume 还支持 inspect (查看详细信息)、 ls (列
出已有数据卷)、 pru口e (清理无用数据卷)、 rm (?#22659;?#25968;据卷)等

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

No Comments Docker

docker file 制作java 运行环境

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

dockerfile 内容

FROM reg.ccie.wang/library/centos:7.5.1804
MAINTAINER [email protected]
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 .

[email protected]:/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
[email protected]:~# docker run -itd -p 10091:10091 -v /opt/dockerfile/java/:/opt/dev centos_java1.8
[email protected]:~# 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
[email protected]:~# docker run -itd -P -v /opt/dockerfile/java/:/opt/dev centos_java1.8
33d6b201ed7e372d5aae686cf48ee3bd155298fac2440e8019e047163d62defb
[email protected]:~# 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
[email protected]:~#

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

 

 

—————报错
容器里面 Failed to get D-Bus connection: Operation not permitted
解决方式
[[email protected] /]# systemctl start zabbix-agent
Failed to get D-Bus connection: Operation not permitted
[[email protected] /]#
解决两?#22336;?#24335;
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

 

前面练完知道如?#38382;?#29992;docker 那么如保更好?#30446;?#21046;也需要进行练习

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

首先查看 cpu的数量
[email protected]:~# 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及相关资源

[email protected]:~# 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
[email protected]:~#

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

一,限制内存

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

[email protected]:~# 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个内存分配进程,?#30475;?#20998;配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

[email protected]:~# 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
[email protected]:~#

————-报错
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 提供的内存限制功能有以?#24405;?#28857;:

容器能使用的内存和?#25442;?#20998;区大小。
容器的核心内存大小。
容器虚拟内存的?#25442;?#34892;为。
容器内存的软性限制。
是否杀死?#21152;?#36807;多内存的容器。
容器被杀死的优先级
一般情况下,达到内存限制的容器过?#38382;?#38388;后就会被系?#25104;?#27515;

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

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

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

CPU 限制相关?#38382;?
docker run命令和 CPU 限制相关的所有选项如下:

选项    描述
–cpuset-cpus=""    允许使用的 CPU 集,值可以为 0-3,0,1
-c,–cpu-shares=0    CPU 共享权值(相对权重)
cpu-period=0    限制 CPU CFS 的周期,?#27573;?#20174; 100ms~1s,即[1000, 1000000]
–cpu-quota=0    限制 CPU CFS 配额,必须不小于1ms,即 >= 1000
–cpuset-mems=""    允许在?#29616;?#34892;的内存节点(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
版权声明:本文为博主原创文章,转载请附上博文链接!

30选5玩法