docker

Docker学习记录(一):Windows7下Docker的安装 本文主要记录Docker在Windows7系统下的安装过程,分享出来和大家一起学习,不足之处请批评指正。一、Docker在Windows10系统下的安装首先简单介绍一下Docker在Windows10系统下的安装方法,比较简单,直接下载DOCKER CE FOR WINDOWS,双击安装就行。(1)DOCKER CE FOR WINDOWS下载DOCKER CE FOR WINDOWS是Docke... 阅读详情

docker秒级启动
自动占用100G(虚拟,有多少用多少)

1.安装配置docker

[root@foundation18 ~]# iptables -t nat -I POSTROUTING -s 172.25.18.0/24 -j MASQUERADE
添加规则,使虚拟机上网

[root@server11 ~]# yum install net-tools-2.0-0.17.20131004git.el7.x86_64 -y
[root@server11 ~]# route add default gw 172.25.18.250  ##添加网关
[root@server11 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.18.250   0.0.0.0         UG    0      0        0 eth0
172.25.18.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

[root@server11 ~]# vim /etc/resolv.conf        ##添加DNS
nameserver 114.114.114.114

[root@server11 ~]# yum install yum-utils device-mapper-persistent-data lvm2 -y
[root@server11 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo       ##下载docker-ce.repo

[root@server11 yum.repos.d]# ls     ##多了一个docker-ce.repo
docker-ce.repo  redhat.repo  yum.repo

[root@server11 yum.repos.d]# yum repolist
******************************************************************
Loaded plugins: product-id, search-disabled-repos, subscription-
              : manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
docker-ce-stable                              | 2.9 kB     00:00     
docker-ce-stable/x86_64/primary_db              |  13 kB   00:00     
repo id                       repo name                        status
docker-ce-stable/x86_64       Docker CE Stable - x86_64           15
rhel7.3                       rhel7.3                          4,751
repolist: 4,766
******************************************************************

[root@server11 docker]# rpm -ivh pigz-2.3.4-1.el7.x86_64.rpm    ##安装依赖及docker-ce(社区版)
[root@server11 docker]# yum install container-selinux-2.21-1.el7.noarch.rpm libsemanage-2.5-8.el7.x86_64.rpm libsemanage-python-2.5-8.el7.x86_64.rpm policycoreutils-2.5-17.1.el7.x86_64.rpm policycoreutils-python-2.5-17.1.el7.x86_64.rpm docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm -y

[root@server11 docker]# yum install bash-* -y   ##安装docker自动补齐工具,注销后重新连接就好了

[root@server11 docker]# ip addr     ##会多一个docker0接口
********************************************************************
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:7f:1e:0f brd ff:ff:ff:ff:ff:ff
    inet 172.25.18.11/24 brd 172.25.18.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe7f:1e0f/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:3b:b1:7a:98 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
********************************************************************

2.docker的使用

[root@server11 docker]# docker load -i rhel7.tar    ##导入docker模块
[root@server11 docker]# docker load -i ubuntu.tar
[root@server11 docker]# docker load -i game2048.tar
[root@server11 docker]# docker load -i nginx.tar 

[root@server11 docker]# docker info ##显示信息
[root@server11 docker]# docker history nginx:latest ##显示nginx的历史配置信息
[root@server11 docker]# docker run -d nginx ##运行nginx  -d   打入后台
自动补齐的话在其后可以添加版本,不加的话默认为最新版
[root@server11 docker]# docker images   ##查看模块信息
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
game2048            latest              19299002fdbe        16 months ago       55.5MB
nginx               latest              af4b3d7d5401        2 years ago         191MB
ubuntu              latest              07c86167cdc4        2 years ago         188MB
rhel7               latest              0a3eb3fde7fd        3 years ago         140MB

[root@server11 docker]# docker ps   ##查看运行状态(只看运行的)
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3da09959370f        nginx               "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes        80/tcp, 443/tcp     epic_shockley

[root@server11 docker]# docker ps -a    ##查看运行状态(所有的)
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3da09959370f        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 2 minutes        80/tcp, 443/tcp     epic_shockley

[root@server11 docker]# docker inspect epic_shockley(为指定的话为随机生成,运行状态中查看)    ##查看具体服务信息

[root@foundation18 ~]# rpm -qf /sbin/brctl ##网桥配置命令
bridge-utils-1.5-9.el7.x86_64
[root@server11 docker]# yum install bridge-utils -y ##安装

[root@server11 docker]# brctl show  ##显示网桥信息
bridge name bridge id       STP enabled interfaces
docker0     8000.02423bb17a98   no      veth714fc41


[root@server11 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3da09959370f        nginx               "nginx -g 'daemon of…"   7 minutes ago       Up 7 minutes        80/tcp, 443/tcp     epic_shockley
[root@server11 docker]# docker stop 3d  ##删除软件应用,id号写前几位不重复即可
3d

docker run -P -name vm1 nginx   ##大写P表示宿主机随机分配端口
[root@server11 docker]# docker run -d -p 80:80 --name vm1 nginx     ##小写p指定宿主机分配端口
e4629fc6fcf04a7badd523248e87bead681edee88334f9dafce965f907f4528d
[root@server11 docker]# docker ps   ##显示信息,可以看到名称vm1
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
e4629fc6fcf0        nginx               "nginx -g 'daemon of…"   16 seconds ago      Up 14 seconds       0.0.0.0:80->80/tcp, 443/tcp   vm1
[root@server11 ~]# docker stop | kill vm1  ##kill比stop要快
[root@server11 ~]# docker rm vm1       ##删除

[root@server11 ~]# docker ps -aq   ##显示查询
04d7646fa0f8
18211b445bba
3da09959370f
[root@server11 ~]# docker kill `docker ps -aq` ##批量停止
[root@server11 ~]# docker rm `docker ps -aq`   ##批量删除

[root@server11 ~]# docker network ls       ##显示网络信息
NETWORK ID          NAME                DRIVER              SCOPE
9e65fc3cf42d        bridge              bridge              local
0ec6ca21f835        host                host                local
dc5d2a52073a        none                null                local

[root@server11 ~]# docker run -d --network host --name vm1 nginx   ##添加网络network  host模式,和宿主机使用同一ip

[root@server11 ~]# docker run -d --network host --name vm1 game2048    ##部署game2048
在浏览器上玩

3.docker基本操作

[root@server11 ~]# docker run -it --name vm1 rhel7 bash        ##用bash打开交互式界面
bash-4.2# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

ctrl  +  p + q  ##打入后台

[root@server11 ~]# docker attach vm1       ##继续进入后台运行
bash-4.2# 


# docker run -it --name vm1 ubuntu bash 创建容器
# docker ps -a              查看容器状态
# docker attach vm1         连接容器
# docker top vm1            查看容器进程

# docker logs vm1           查看容器指令输出 -f 参数可以实时查看
# docker inspect vm1            查看容器详情
# docker stats vm1          查看容器资源使用率
# docker diff vm1           查看容器修改
# docker run -d --name vm1 ubuntu bash -c "while true; do echo westos; sleep 1; done"   后台运行
# docker stop vm1           停止容器
# docker start vm1          启动容器
# docker kill vm1           强制干掉容器
# docker restart vm1            重启容器
# docker pause/unpause vm1      暂停/恢复容器
# docker rm vm1             删除容器

# docker export vm1 > vm1.tar       导出容器
# docker import vm1.tar image       导入容器为镜像 image

# docker search     查询镜像
# docker pull       拉取镜像
# docker push       推送镜像

逻辑卷管理

[root@server11 ~]# docker run -it --name vm1 ubuntu
[root@server11 ~]# docker container stats vm1      ##动态监控
[root@server11 ~]# docker container top vm1        ##静态数据监控
[root@server11 ~]# docker container prune      ##删除所有关闭的容器
[root@server11 ~]# docker search nginx         ##查看nginx(默认联网搜索)
配置docker加速器,自己申请
[root@server11 ~]# cd /etc/docker/
[root@server11 docker]# ls              ##加速器默认下载到这里
key.json

[root@server11 ~]# docker image save rhel7 > test.tar  ##镜像封装到test.tar

[root@server11 ~]# docker run -d --name vm1 nginx  ##命名为vm1启动
f0c1b860f93f558e84a6b21ea1d61ea32b556871292a987e0978040aad204859
[root@server11 ~]# docker container exec vm1 ls /usr/share/nginx/html  ##exec不记入日至中
50x.html
index.html
[root@server11 ~]# docker container exec vm1 ls /etc/nginx

[root@server11 ~]# vim test.html
www.westos.com
[root@server11 ~]# docker container cp test.html vm1:/usr/share/nginx/html/
[root@server11 ~]# docker container exec vm1 ls /usr/share/nginx/html
50x.html
index.html
test.html
[root@server11 ~]# curl 172.17.0.2/test.html
www.westos.com


[root@server11 ~]# docker run -d --name vm1 -v /tmp/html:/usr/share/nginx/html nginx   ##把/usr/share/nginx/html挂载到/tmp
[root@server11 ~]# cd /tmp/    ##宿主机上直接访问
[root@server11 html]# vim index.html
hello world
[root@server11 html]# curl 172.17.0.2
hello world


[root@server11 html]# docker run -it --name vm2 -v /tmp/data1:/data1 -v /tmp/data2:/data2 -v /etc/passwd:/passwd:ro ubuntu  
root@d047b73983fd:/# cd data2/
root@d047b73983fd:/data2# touch file2
root@d047b73983fd:/data2# [root@server11 html]# 
[root@server11 html]# cd /tmp/data2/
[root@server11 data2]# ls
file2


[root@server11 ~]# docker create --name datavol -v /tmp/data1:/data1 -v /tmp/data2:/data2 -v /etc/passwd:/passwd:ro ubuntu     ##做虚拟封装,docker ps 查不到,默认为stop状态
[root@server11 ~]# docker run -it --volumes-from datavol --name vm2 ubuntu ##可以拿虚拟封装直接启动
[root@server11 ~]# docker run -it --volumes-from datavol --name vm3 ubuntu


[root@server11 ~]# docker run --rm --volumes-from datavol -v /tmp/backup:/backup ubuntu tar cf /backup/data.tar /data2
[root@server11 ~]# cd /tmp/backup/
[root@server11 backup]# ls
data.tar


4.网络管理

bridge(默认)

[root@server11 ~]# docker run -it --name vm1 ubuntu
root@7722a26eef1e:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
30: eth0@if31: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@server11 ~]# docker run -it --name vm2 --network container:vm1 ubuntu
root@7722a26eef1e:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
30: eth0@if31: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

host

[root@server11 ~]# docker run -it --network host ubuntu
root@server11:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:7f:1e:0f brd ff:ff:ff:ff:ff:ff
    inet 172.25.18.11/24 brd 172.25.18.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe7f:1e0f/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:3b:b1:7a:98 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:3bff:feb1:7a98/64 scope link 
       valid_lft forever preferred_lft forever

none

[root@server11 ~]# docker run -it --name vm1 --network none ubuntu
root@8a4789e61540:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever


[root@server11 ~]# cd /var/run/
[root@server11 run]# ip netns list
[root@server11 run]# ip netns help
[root@server11 run]# ip netns add test
[root@server11 run]# cd netns/
[root@server11 netns]# ls
test
[root@server11 netns]# ip netns delete test
[root@server11 netns]# ls
[root@server11 netns]# ip link add name veth0 type veth peer name veth1
[root@server11 netns]# brctl addif docker0 veth1
[root@server11 netns]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.02423bb17a98   no      veth1
[root@server11 netns]# ip link set up veth1
[root@server11 netns]# ip link set up veth0
[root@server11 ~]# docker inspect vm1 | grep Pid
            "Pid": 9247,
            "PidMode": "",
            "PidsLimit": 0,
[root@server11 ~]# cd /proc/9247/ns/
[root@server11 ns]# ll
total 0
lrwxrwxrwx 1 root root 0 May  4 03:33 ipc -> ipc:[4026532208]
lrwxrwxrwx 1 root root 0 May  4 03:33 mnt -> mnt:[4026532206]
lrwxrwxrwx 1 root root 0 May  4 03:26 net -> net:[4026532211]
lrwxrwxrwx 1 root root 0 May  4 03:33 pid -> pid:[4026532209]
lrwxrwxrwx 1 root root 0 May  4 03:33 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 May  4 03:33 uts -> uts:[4026532207]

[root@server11 ns]# ln -s /proc/9247/ns/net /var/run/netns/9247
[root@server11 ns]# ip netns list
9247
[root@server11 ns]# ip link set veth0 netns 9247
[root@server11 ns]# ip netns exec 9247 ip link set veth0 name eth0
[root@server11 ns]# ip netns exec 9247 ip addr add 172.25.18.10/24 dev eth0
[root@server11 ns]# ip netns exec 9247 ip link set up eth0

[root@server11 netns]# docker attach vm1
root@8a4789e61540:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
33: eth0@if32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 56:85:91:a7:94:3e brd ff:ff:ff:ff:ff:ff
    inet 172.25.18.10/24 scope global eth0
       valid_lft forever preferred_lft forever

5.容器间互联:

docker run -it --name vm2 --link vm1:web ubuntu
ping web

6.封装一个新的容器

首先新建个空文件夹

[root@server11 docker]# vim Dockerfile
FROM rhel7:v1
MAINTAINER zerotoherodevin@63.com
ENV HOSTNAME server1
EXPOSE 80
RUN yum install -y httpd
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

[root@server11 docker]# docker run --name vm1 -it rhel7 bash
bash-4.2# rpmdb --rebuilddb
bash-4.2# cd /etc/yum.repos.d/
bash-4.2# ls
rhel7.repo
bash-4.2# vi dvd.repo
[dvd]
name=rhel7.3
baseurl=http://172.25.18.250/rhel7.3
gpgcheck=0

bash-4.2# rm -rf rhel7.repo
bash-4.2# yum clean all
Cleaning repos: dvd
Cleaning up everything
bash-4.2# yum repolist
dvd                                           | 4.1 kB     00:00     
(1/2): dvd/group_gz                             | 136 kB   00:00     
(2/2): dvd/primary_db                           | 3.9 MB   00:00     
repo id                        repo name                       status
dvd                            rhel7.3                         4751
repolist: 4751

[root@server11 docker]# docker commit vm1 rhel7:v1
[root@server11 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rhel7               v1                  9614c7d4e7eb        4 seconds ago       171MB
game2048            latest              19299002fdbe        16 months ago       55.5MB
nginx               latest              af4b3d7d5401        2 years ago         191MB
ubuntu              latest              07c86167cdc4        2 years ago         188MB
rhel7               latest              0a3eb3fde7fd        3 years ago         140MB

[root@server11 docker]# docker kill vm1
[root@server11 docker]# docker rm vm1
[root@server11 docker]# docker build -t rhel7:v2 .

[root@server11 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rhel7               v2                  22093c09706c        39 seconds ago      200MB
rhel7               v1                  9614c7d4e7eb        4 minutes ago       171MB
game2048            latest              19299002fdbe        16 months ago       55.5MB
nginx               latest              af4b3d7d5401        2 years ago         191MB
ubuntu              latest              07c86167cdc4        2 years ago         188MB
rhel7               latest              0a3eb3fde7fd        3 years ago         140MB

[root@server11 docker]# mkdir web
[root@server11 docker]# cd web/
[root@server11 web]# vim index.html
www.westos.com
[root@server11 web]# docker run -d --name apache -v /root/docker/docker/web/:/var/www/html rhel7:v2
[root@server11 web]# curl 172.17.0.2
www.westos.com

基础服务封装

[root@server11 ns]# docker run --name vm2 -it rhel7 bash
bash-4.2# yum install openssh-server openssh-clients -y
bash-4.2# ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
bash-4.2# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" 
bash-4.2# ssh-keygen -q -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
bash-4.2# /usr/sbin/sshd
bash-4.2# echo root:westos | chpasswd
[root@server11 web]# ssh 172.17.0.3



FROM rhel7:v1
MAINTAINER zerotoherodevin@63.com
ENV HOSTNAME server2
EXPOSE 22
RUN yum install -y openssh-server openssh-clients && ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && ssh-keygen -q -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" && echo root:westos | chpasswd
CMD ["/usr/sbin/sshd","-D"]

[root@server11 docker]# docker build -t rhel7:v3 .
[root@server11 docker]# docker run -d --name ssh -p 2222:22 rhel7:v3
[root@foundation18 Desktop]# ssh -l root -p 2222 172.25.18.11   ##客户机ssh宿主机2222端口,不是宿主机测试

[root@server11 ns]# iptables -t nat -nL     ##查看规则

多个服务启动

[root@server11 docker]# docker run -it --name vm1 rhel7:v1
bash-4.2# vi /etc/yum.repos.d/dvd.repo
[dvd]
name=rhel7.3
baseurl=http://172.25.18.250/rhel7.3
gpgcheck=0

[docker]
name=docker
baseurl=ftp://172.25.254.250/pub/docker
gpgcheck=0

bash-4.2# yum repolist
docker                                             | 2.9 kB     00:00     
dvd                                                | 4.1 kB     00:00     
docker/primary_db                                    | 9.1 kB   00:01     
repo id                           repo name                         status
docker                            docker                              11
dvd                               rhel7.3                           4751
repolist: 4762

bash-4.2# yum install supervisor -y


[root@server11 docker]# pwd
/root/docker/docker
[root@server11 docker]# ls
Dockerfile  web
[root@server11 docker]# vim docker.repo
[docker]
name=docker
baseurl=ftp://172.25.254.250/pub/docker
gpgcheck=0

[root@server11 docker]# vim Dockerfile
FROM rhel7:v1
MAINTAINER zerotoherodevin@63.com
ENV HOSTNAME server3
EXPOSE 22 80
COPY docker.repo /etc/yum.repos.d/docker.repo
RUN yum install -y openssh-server openssh-clients httpd supervisor && ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && ssh-keygen -q -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" && echo root:westos | chpasswd
VOLUME ["/var/www/html"]
COPY supervisord.conf /etc/supervisord.conf
CMD ["/usr/sbin/supervisord]


[root@server11 docker]# vim supervisord.conf    编写supervisord配置文件
[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:httpd]
command=/usr/sbin/httpd



[root@server11 docker]# docker build -t rhel7:v4 .  ##建立v4
[root@server11 docker]# docker images rhel7
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rhel7               v4                  2dd4e5b6b9a5        23 seconds ago      209MB
rhel7               v3                  3c055dae85e9        3 days ago          185MB
rhel7               v2                  22093c09706c        3 days ago          200MB
rhel7               v1                  9614c7d4e7eb        3 days ago          171MB
rhel7               latest              0a3eb3fde7fd        3 years ago         140MB


[root@server11 docker]# docker history rhel7:v4
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
2dd4e5b6b9a5        2 minutes ago       /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "[\"/…   0B                  
58a68e395f95        2 minutes ago       /bin/sh -c #(nop) COPY file:cc98e6717d5456ef…   111B                
41ea42dd0778        2 minutes ago       /bin/sh -c #(nop)  VOLUME [/var/www/html]       0B                  
a39470ef76df        2 minutes ago       /bin/sh -c yum install -y openssh-server ope…   38MB                
8f0e4002e154        3 minutes ago       /bin/sh -c #(nop) COPY file:547c66195da09830…   72B                 
7f34523553e4        3 minutes ago       /bin/sh -c #(nop)  EXPOSE 22 80                 0B                  
9685ba5e6eb5        3 minutes ago       /bin/sh -c #(nop)  ENV HOSTNAME=server3         0B                  
3c267745b228        3 days ago          /bin/sh -c #(nop)  MAINTAINER zerotoherodevi…   0B                  
9614c7d4e7eb        3 days ago          bash                                            30.7MB              
0a3eb3fde7fd        3 years ago                                                         140MB               Imported from -


[root@server11 docker]# docker run -d --name web -v /root/docker/web/:/var/www/html rhel7:v4    ##启动
b9e4631cbf2a312ffe71e15469cfb58876b545182f5c485773ca2a515c9eb358

[root@server11 docker]# cat web/index.html 
www.westos.com
[root@server11 docker]# curl 172.17.0.2     ##测试apache
[root@server11 docker]# ssh root@172.17.0.2 ##测试sshd

docker私有仓库

[root@server11 docker]# docker load -i registry-2.3.1.tar   ##导入tar包
[root@server11 docker]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2.3.1        ##端口映射5000端口,运行
cf40c5a5d24c13f14c03bfe98281fc05e1d50bd2c147a9b38ab6bca4a6814ef6
[root@server11 docker]# docker tag nginx localhost:5000/nginx:latest    ##命名
[root@server11 docker]# docker push localhost:5000/nginx:latest     ##推送
[root@server11 docker]# docker rmi localhost:5000/nginx         ##删除
[root@server11 docker]# docker rmi nginx                ##删除
[root@server11 docker]# docker pull localhost:5000/nginx:latest     ##下载
[root@server11 docker]# docker tag localhost:5000/nginx:latest nginx    ##命名
[root@server11 docker]# docker rmi localhost:5000/nginx         ##删除



添加认证

[root@server11 docker]# vim /etc/hosts
172.25.18.11    server11        devin.org
[root@server11 docker]# mkdir certs
[root@server11 docker]# cd certs/
[root@server11 certs]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout devin.org.key -x509 -days 365 -out devin.org.crt ##创建密钥 ****************************************************
Generating a 4096 bit RSA private key
......................++
........................................................................................................................................++
writing new private key to 'devin.org.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:devin
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:devin.org      ##本地域名解析,一定要写!!
Email Address []:zerotoherodevin@163.com
****************************************************
[root@server11 certs]# ls
devin.org.crt  devin.org.key
[root@server11 certs]# cd /opt/registry/    ##还用这个目录
[root@server11 registry]# rm -rf *      ##清空
[root@server11 docker]# docker run -d --name registry --restart=always -v `pwd`/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/devin.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/devin.org.key -p 443:443 -v /opt/registry/:/var/lib/registry registry:2.3.1 
6009b92fabdbd725e312a2ba28dcd2f5d63fd13f0702f3eaef8ecd4768c81dc2


[root@server11 docker]# cd /etc/docker/
[root@server11 docker]# ls
key.json
[root@server11 docker]# mkdir -p certs.d/devin.org  ##识别目录
[root@server11 docker]# ls
certs.d  key.json
[root@server11 docker]# cd certs.d/westos.org/
[root@server11 westos.org]# cp ~/docker/docker/certs/devin.org.crt ca.crt
[root@server11 westos.org]# ls
ca.crt
[root@server11 devin.org]# docker tag ubuntu:latest devin.org/ubuntu
[root@server11 devin.org]# docker push devin.org/ubuntu     ##推送上去
The push refers to repository [devin.org/ubuntu]        
5f70bf18a086: Pushed 
11083b444c90: Pushed 
9468150a390c: Pushed 
56abdd66ba31: Pushed 
latest: digest: sha256:4e709bde11754c2a27ed6e9b9ba55569647f83903f85cd8107e36162c5579984 size: 1151

[root@server11 devin.org]# docker rmi devin.org/ubuntu      ##删除镜像
[root@server12 ~]# cd /etc/docker/
[root@server12 docker]# ls
key.json
[root@server12 docker]# mkdir -p certs.d/devin.org
[root@server12 docker]# cd certs.d/devin.org/
[root@server11 devin.org]# scp ca.crt server12:/etc/docker/certs.d/devin.org/   ##发送给server12
[root@server12 devin.org]# ls
ca.crt
[root@server12 devin.org]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@server12 devin.org]# docker pull devin.org/ubuntu     ##下载镜像
Using default tag: latest
latest: Pulling from ubuntu
257507fcd746: Pull complete 
cd03f9b52ed8: Pull complete 
493709ab45b5: Pull complete 
4f4fb700ef54: Pull complete 
Digest: sha256:4e709bde11754c2a27ed6e9b9ba55569647f83903f85cd8107e36162c5579984
Status: Downloaded newer image for devin.org/ubuntu:latest
[root@server12 devin.org]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
devin.org/ubuntu    latest              07c86167cdc4        2 years ago         188MB
[root@server12 devin.org]# curl --cacert /etc/docker/certs.d/devin.org/ca.crt https://devin.org/v2/_catalog ##查看信息
{"repositories":["ubuntu"]}
[root@server12 devin.org]# cd /etc/pki/ca-trust/source/anchors/
[root@server12 anchors]# cp /etc/docker/certs.d/devin.org/ca.crt .
[root@server12 anchors]# ls
ca.crt
[root@server12 anchors]# mv ca.crt devin.org.crt        ##更改名称
[root@server12 anchors]# ls
devin.org.crt
[root@server12 anchors]# update-ca-trust            ##更新验证信息
[root@server12 anchors]# curl https://devin.org/v2/_catalog     ##免密查看
{"repositories":["ubuntu"]}

curl验证

[root@server11 docker]# mkdir auth
[root@server11 docker]# docker run --entrypoint htpasswd registry:2.3.1 -Bbn admin westos > auth/htpasswd   ##加入验证信息
[root@server11 docker]# cd auth/
[root@server11 auth]# cat htpasswd 
admin:$2y$05$v43Cln6DPHGCIj3i6gJctOBo3Nslr/hSdKhhaiyB9w/LCmh0UDF8K
[root@server11 auth]# docker run --entrypoint htpasswd registry:2.3.1 -Bbn hjq devin >> htpasswd        ##追加验证信息
[root@server11 auth]# cat htpasswd 
admin:$2y$05$v43Cln6DPHGCIj3i6gJctOBo3Nslr/hSdKhhaiyB9w/LCmh0UDF8K
hjq:$2y$05$d43C4e9tdzdTf8K35SD9beAzkfbC0Nwtwr9UoMYue8mzS4NfV4khW

[root@server11 docker]# docker run -d --name registry --restart=always -v `pwd`/certs:/certs -v `pwd`/auth:/auth  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/devin.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/devin.org.key -e REGISTRY_AUTH=htpasswd -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=auth/htpasswd -p 443:443 -v /opt/registry/:/var/lib/registry registry:2.3.1 
31188fcc2aa0b12d04145b57d005467ba57507f44670f078dcb0fa496bb61c26        ##运行registry

[root@server11 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
31188fcc2aa0        registry:2.3.1      "/bin/registry /etc/…"   24 seconds ago      Up 22 seconds       0.0.0.0:443->443/tcp, 5000/tcp   registry

[root@server12 ~]# docker login devin.org      ##验证信息
Username: admin
Password: 
Login Succeeded

[root@server12 ~]# cd .docker/
[root@server12 .docker]# cat config.json        ##密码文件
{
    "auths": {
        "devin.org": {
            "auth": "YWRtaW46d2VzdG9z"
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/18.03.1-ce (linux)"
    }

[root@server12 .docker]# docker pull devin.org/ubuntu
Using default tag: latest
latest: Pulling from ubuntu
Digest: sha256:4e709bde11754c2a27ed6e9b9ba55569647f83903f85cd8107e36162c5579984
Status: Image is up to date for devin.org/ubuntu:latest

[root@server12 docker]# curl -u admin:westos https://devin.org/v2/_catalog  ##查看容器信息

cgroup管理

新开一个rhel6.5的虚拟机server1
[root@server1 ~]# yum install libcgroup.x86_64 -y
[root@server1 ~]# /etc/init.d/cgconfig start       
[root@server1 /]# cd cgroup/
[root@server1 cgroup]# ll       ##组内的管理文件
total 0
drwxr-xr-x 2 root root 0 May  8 15:20 blkio
drwxr-xr-x 2 root root 0 May  8 15:20 cpu
drwxr-xr-x 2 root root 0 May  8 15:20 cpuacct
drwxr-xr-x 2 root root 0 May  8 15:20 cpuset
drwxr-xr-x 2 root root 0 May  8 15:20 devices
drwxr-xr-x 2 root root 0 May  8 15:20 freezer
drwxr-xr-x 2 root root 0 May  8 15:20 memory
drwxr-xr-x 2 root root 0 May  8 15:20 net_cls

内存

[root@server1 cgroup]# cd memory/   ##内存管理
[root@server1 memory]# ls
cgroup.event_control             memory.move_charge_at_immigrate
cgroup.procs                     memory.oom_control
memory.failcnt                   memory.soft_limit_in_bytes
memory.force_empty               memory.stat
memory.limit_in_bytes            memory.swappiness
memory.max_usage_in_bytes        memory.usage_in_bytes
memory.memsw.failcnt             memory.use_hierarchy
memory.memsw.limit_in_bytes      notify_on_release
memory.memsw.max_usage_in_bytes  release_agent
memory.memsw.usage_in_bytes      tasks

[root@server1 memory]# bc   ##打开计算器
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
100*1024
102400
100*1024*1024
104857600
quit


[root@server1 memory]# vim /etc/cgconfig.conf       ##配置文件
group x1 {
        memory {
                memory.limit_in_bytes = 104857600;
        memory.memsw.limit_in_bytes = 104857600;
        }
}

[root@server1 memory]# cd ..        ##退出来再重启,不然会占用报错
[root@server1 cgroup]# /etc/init.d/cgconfig restart 
Stopping cgconfig service:                                 [  OK  ]
Starting cgconfig service:                                 [  OK  ]

[root@server1 cgroup]# cd memory/x1/        ##新建的x1
[root@server1 x1]# cat memory.limit_in_bytes 
104857600

[root@server1 x1]# vim /etc/cgrules.conf    ##指定用户
devin           memory          x1/


[root@server1 x1]# /etc/init.d/cgred start  ##启动cgred

[root@server1 x1]# cgexec -g memory:x1 dd if=/dev/zero of=bigfile bs=1M count=200   ##指定规则切割
Killed

或者

[root@server1 x1]# useradd devin
[root@server1 x1]# su - devin
[devin@server1 ~]$ cd /dev/shm/
[devin@server1 shm]$ dd if=/dev/zero of=bigfile bs=1M count=200
Killed

cpu

[root@server1 shm]# cd /cgroup/cpu
[root@server1 cpu]# ll
total 0
--w--w--w- 1 root root 0 May  8 15:44 cgroup.event_control
-rw-r--r-- 1 root root 0 May  8 15:44 cgroup.procs
-rw-r--r-- 1 root root 0 May  8 15:44 cpu.cfs_period_us
-rw-r--r-- 1 root root 0 May  8 15:44 cpu.cfs_quota_us
-rw-r--r-- 1 root root 0 May  8 15:44 cpu.rt_period_us
-rw-r--r-- 1 root root 0 May  8 15:44 cpu.rt_runtime_us
-rw-r--r-- 1 root root 0 May  8 15:44 cpu.shares
-r--r--r-- 1 root root 0 May  8 15:44 cpu.stat
-rw-r--r-- 1 root root 0 May  8 15:44 notify_on_release
-rw-r--r-- 1 root root 0 May  8 15:44 release_agent
-rw-r--r-- 1 root root 0 May  8 15:44 tasks


[root@server1 cpu]# cat cpu.shares 
1024

[root@server1 cpu]# vim /etc/cgconfig.conf 
group x2 {
        cpu {
                cpu.share = 100;
        }
}

[root@server1 cpu]# cd
[root@server1 ~]# /etc/init.d/cgconfig restart
Stopping cgconfig service:                                 [  OK  ]
Starting cgconfig service:                                 [  OK  ]

[root@server1 ~]# cd -
/cgroup/cpu
[root@server1 cpu]# cd x2/
[root@server1 x2]# cat cpu.shares 
100

[root@server1 x2]# dd if=/dev/zero of=/dev/null &
[1] 1243
[root@server1 x2]# top


cpu管理工具
[root@server1 x2]# cd /sys/devices/system/cpu/
[root@server1 cpu]# ls
cpu0   cpu1  cpufreq  cpuidle  kernel_max  offline  online  possible  present
[root@server1 cpu]# cd cpu1     ##cpu0是默认的,无法更改
[root@server1 cpu1]# ls
cache  online  crash_notes  node0  topology
[root@server1 cpu1]# cat online     ##显示cpu信息
1
[root@server1 cpu1]# echo 0 > online    ##更改0挂掉,1上线

[root@server1 ~]# killall dd       ##删除所有dd进程

cpu1再打开,yongtop查看

blkio

[root@server1 blkio]# ll /dev/vda
brw-rw---- 1 root disk 252, 0 May  8 15:11 /dev/vda     ##252,0 是vda的信息

[root@server1 blkio]# vim /etc/cgconfig.conf
group x3 {
        blkio {
                blkio.throttle.read_bps_device = "252:0 1000000";   ##限速1000k
        }
}

[root@server1 ~]# yum install iotop -y     ##查看速度的软件

[root@server1 ~]# cgexec -g blkio:x3 dd if=/dev/vda of=/dev/null & ##执行
[1] 1306
[root@server1 ~]# iotop        ##查看


##freezer

[root@server1 freezer]# vim /etc/cgconfig.conf 
group x4 {
        freezer {}      ##冻结
}



[root@server1 freezer]# cd  
[root@server1 ~]# /etc/init.d/cgconfig restart
Stopping cgconfig service:                                 [  OK  ]
Starting cgconfig service:                                 [  OK  ]
[root@server1 ~]# cd -
/cgroup/freezer
[root@server1 freezer]# cd x4/


[root@server1 x4]# cat tasks        ##管理进程的文件
[root@server1 x4]# cgexec -g blkio:x3 dd if=/dev/vda of=/dev/null &
[1] 1336
[root@server1 x4]# echo 1336 > tasks    ##导入(用的是速度查询的进程)
[root@server1 x4]# cat freezer.state    ##运行状态
THAWED
[root@server1 x4]# echo FROZEN > freezer.state  ##冻结状态
[root@server1 x4]# iotop
[root@server1 x4]# echo THAWED > freezer.state  ##正常运行
[root@server1 x4]# iotop

权限控制

[root@server11 ~]# docker run -it --name vm1 ubuntu
root@7b2d87cf4cfb:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft foreve

root@7b2d87cf4cfb:/# ip addr del 172.17.0.2/16 dev eth
Not enough information: "dev" argument is required.


[root@server11 ~]# docker rm vm1
vm1
[root@server11 ~]# docker run -it --name vm1 --privileged=true ubuntu      ##权限全开
root@73ac51e1357c:/# ip addr del 172.17.0.2/16 dev eth0             ##成功删除

[root@server11 ~]# docker run -it --name vm1 --cap-add=NET_ADMIN ubuntu        ##只开网络管理权限
root@4f99c78bffcd:/# [root@server11 ~]# 
[root@server11 ~]# docker inspect -f {{.HostConfig.CapAdd}} vm1            ##查看权限
[NET_ADMIN]

下载docker-compose-Linux-x86_64
[root@server11 ~]# mv docker-compose-Linux-x86_64 /usr/local/sbin/     ##是个执行文件
[root@server11 ~]# cd /usr/local/sbin/
[root@server11 sbin]# chmod +x docker-compose-Linux-x86_64          ##加执行权限
[root@server11 sbin]# ln -s docker-compose-Linux-x86_64 docker-compose      ##做链接


[root@server11 docker]# mkdir compose
[root@server11 docker]# cd compose/
[root@server11 compose]# mkdir haproxy
[root@server11 compose]# mkdir web
[root@server11 compose]# vim docker-compose.yml
apache:
    build: ./web        ##因为是yun install 自己装的,所以要build
    expose:
        - 80

nginx:
    image: nginx        ##用的是容器,直接使用
    expose:
        - 80

haproxy:
    image: haproxy
    volumes:
        - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    links:
        - apache
        - nginx
    ports:
        - "80:80"
    expose:
        - "80"

[root@server11 compose]# cd ..
[root@server11 docker]# cp Dockerfile  compose/web/     ##复制执行文件 Dockerfile 
[root@server11 docker]# cd compose/web/
[root@server11 web]# vim Dockerfile             ##修改以下之前的文件
FROM rhel7:v1
MAINTAINER zerotoherodevin@63.com
ENV HOSTNAME apache
EXPOSE 80
RUN yum install -y httpd 
COPY index.html /var/www/html/index.html
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

[root@server11 web]# vim index.html     ##配置发布目录
www.westos.com


[root@server11 compose]# cd haproxy/
[root@server11 haproxy]# vim haproxy.cfg    ##配置haproxy
*************************************
global
    log 127.0.0.1 local0

defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    stats uri /status

frontend balancer
    bind 0.0.0.0:80
    default_backend web_backends

backend web_backends
    balance roundrobin
    server web1 apache:80 check
    server web2 nginx:80 check
*************************************

下载haproxy

[root@server11 ~]# docker load -i haproxy.tar      ##挂载


[root@server11 compose]# docker-compose up  ##开始    必须再compose目录下
[root@server11 compose]# docker-compose start   ##启动
[root@server11 compose]# docker ps      ##查看状态
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
574b3177880a        haproxy             "/docker-entrypoint.…"   About a minute ago   Up 8 seconds        0.0.0.0:80->80/tcp   compose_haproxy_1
6c40c6477082        nginx               "nginx -g 'daemon of…"   About a minute ago   Up 9 seconds        80/tcp, 443/tcp      compose_nginx_1
15e50bf6a397        compose_apache      "/usr/sbin/httpd -D …"   About a minute ago   Up 10 seconds       80/tcp               compose_apache_1
测试:
浏览器访问http://172.25.18.11/status
浏览器访问http://172.25.18.11/刷新查看轮询状态
[root@server11 compose]# docker-compose port haproxy 80
0.0.0.0:80

清空环境

[root@server11 compose]# docker-compose stop
Stopping compose_haproxy_1 ... done
Stopping compose_nginx_1 ... done
Stopping compose_apache_1 ... done
[root@server11 compose]# docker-compose rm
Going to remove compose_haproxy_1, compose_nginx_1, compose_apache_1
Are you sure? [yN] y
Removing compose_haproxy_1 ... done
Removing compose_nginx_1 ... done
Removing compose_apache_1 ... done
[root@server11 compose]# docker rmi compose_apache:latest 

集群管理,再开两个rhel7.3的虚拟机server12 server13,配置好docker环境

加解析,时间同步

[root@server11 compose]# docker swarm init  ##集群初始化
Swarm initialized: current node (fk4rr45hk5b9rrps16huounyh) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-1mbgkd482uys73hj21mq4xgjnx2x083rv73npjkr0p8oy6nq30-2a2beqem8hkwp897ld9rhmona 172.25.18.11:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[root@server12 ~]# docker swarm join --token SWMTKN-1-1mbgkd482uys73hj21mq4xgjnx2x083rv73npjkr0p8oy6nq30-2a2beqem8hkwp897ld9rhmona 172.25.18.11:2377
This node joined a swarm as a worker.   ##加入集群

[root@server13 ~]# docker swarm join --token SWMTKN-1-1mbgkd482uys73hj21mq4xgjnx2x083rv73npjkr0p8oy6nq30-2a2beqem8hkwp897ld9rhmona 172.25.18.11:2377
This node joined a swarm as a worker.   ##加入集群

[root@server11 compose]# docker node ls     ##查看节点
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
fk4rr45hk5b9rrps16huounyh *   server11            Ready               Active              Leader              18.03.1-ce
qqs3demm4q5clldkx5tyw7oac     server12            Ready               Active                                  18.03.1-ce
g7ukui2aqdqi34bqsgz6jfj2m     server13            Ready               Active                                  18.03.1-ce



[root@server11 ~]# docker service create --name web --publish 80:80 --replicas 3 nginx     ##创建,开三个,80端口映射
uyne4xd2kxs6qezxowu3xjqgr
overall progress: 3 out of 3 tasks 
1/3: running   
2/3: running   
3/3: running   
verify: Service converged 

[root@server11 ~]# docker service ps web   ##查看状态
[root@server11 ~]# docker service scale web=6  ##更改为6个
[root@server11 ~]# docker service ps web   ##查看状态

监控

[root@server11 ~]# docker load -i visualizer.tar   ##导入监控包
[root@server11 ~]# docker service create --name=vi --publish=8080:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer        ##创建名字为vi,端口映射为8080的监控
测试:
浏览器访问http://172.25.18.11:8080/
[root@server11 ~]# docker service scale web=3  ##更改为3个
测试:
浏览器访问http://172.25.18.11:8080/      ##动态更新




[root@server11 ~]# docker save rhel7:v2 > rhel7.tar    ##导出到包中
[root@server11 ~]# scp rhel7.tar server12:     ##分发给server12
[root@server11 ~]# scp rhel7.tar server13:     ##分发给server13

[root@server11 ~]# docker service update --update-parallelism 2 --update-delay 2s --update-failure-action rollback --image rhel7:v2 web        ##执行更新,没次两个,每两秒一次,错误更新回滚,web更新为rhel7:v2

flask pythoneijian配件

[root@server11 ~]# docker load -i flask.tar    ##导入flask包

[root@server11 ~]# vim test.py         ##写python脚本
*****************************
from flask import Flask             ##导入flask类
import os                   ##导入os模块
app = Flask(__name__)
@app.route("/")
def env():
    return os.environ["HOSTNAME"]       ##宿主机名
app.run(host="0.0.0.0")
*****************************

[root@server11 ~]# docker run -d --name test -v /root/test.py:/test.py python:flask python /test.py    ##运行
[root@server11 ~]# curl 172.17.0.2:5000        ##测试
5052a05f6526

[root@server11 ~]# docker kill test        ##清空环境
test
[root@server11 ~]# docker rm test
test

[root@server11 ~]# docker run -it --name test python:flask ##交互式打开
Python 2.7.11 (default, Mar 24 2016, 09:47:20) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>             ##ctrl + p + q 打入后台

[root@server11 ~]# docker container cp test.py test:/      ##复制进容器
[root@server11 ~]# docker container exec test ls /     ##查看是否有test.py
[root@server11 ~]# docker container commit test    python:demo ##保存
[root@server11 ~]# docker save python:demo > demo.tar      ##导出到demo.tar
[root@server11 ~]# scp demo.tar server12:          ##分发给server12
[root@server11 ~]# scp demo.tar server13:          ##分发给server13
[root@server12 ~]# docker load -i demo.tar         
[root@server13 ~]# docker load -i demo.tar

[root@server11 ~]# docker service rm web           ##清空环境
[root@server11 ~]# docker service create --replicas 3 --publish 80:5000 python:demo python /test.py    ##建立三个,端口映射为80,执行test.py文件

[root@server11 ~]# docker service ls       ##因为忘记命名了,所以查看一下随机生成的名字
ID                  NAME                MODE                REPLICAS            IMAGE                             PORTS
z2wih3aeznxq        hardcore_bassi      replicated          3/3                 python:demo                       *:80->5000/tcp
j8g3o06y3tr3        vi                  replicated          1/1                 dockersamples/visualizer:latest   *:8080->8080/tcp
[root@server11 ~]# docker service ps hardcore_bassi    ##查看状态
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
671cxu7uxwq2        hardcore_bassi.1    python:demo         server11            Running             Running 52 seconds ago                       
kdm49yzr0ju1        hardcore_bassi.2    python:demo         server12            Running             Running 50 seconds ago                       
cvd5y571k561        hardcore_bassi.3    python:demo         server13            Running             Running 49 seconds ago


[root@foundation18 ~]# for i in {1..10}; do curl -w "\n" 172.25.18.11; done    ##真机测试,三个一循环
8390916ce00e
da81ac5e15fa
a9f5c387f3f5
8390916ce00e
da81ac5e15fa
a9f5c387f3f5
8390916ce00e
da81ac5e15fa
a9f5c387f3f5
8390916ce00e

[root@server11 ~]# docker service scale hardcore_bassi=10          ##开启10个
[root@foundation18 ~]# for i in {1..20}; do curl -w "\n" 172.25.18.11; done    ##真机测试,十个一循环
da81ac5e15fa
a9f5c387f3f5
6f645c7f7491
66f2020fded1
f9531d7e4000
2ef7f3821dd5
58deb819b70e
3da12c0d2f6c
7c54a4fcc8a5
8390916ce00e
da81ac5e15fa
a9f5c387f3f5
6f645c7f7491
66f2020fded1
f9531d7e4000
2ef7f3821dd5
58deb819b70e
3da12c0d2f6c
7c54a4fcc8a5
8390916ce00e

文件挂载

[root@server11 ~]# docker service create --name web --replicas 3 -p 80:80 nginx
[root@server11 ~]# docker service update --mount-add type=bind,source=/root/web,target=/usr/share/nginx/html web   ##前提是三个机子都有/root/web/index.html文件

[root@foundation18 ~]# curl 172.25.18.11   ##server11里写了一个  server12里写了两个  server13里写了三个
www.westos.com
[root@foundation18 ~]# curl 172.25.18.11
www.westos.com
www.westos.com
[root@foundation18 ~]# curl 172.25.18.11
www.westos.com
www.westos.com
www.westos.com

也可以直接挂载

[root@server11 ~]# docker service create --name web --replicas 3 -p 80:80 --mount type=bind,source=/root/web,target=/usr/share/nginx/html nginx

!!!!!!!!!!!!!!!解决报错问题!!!!!!!!!!!!!!!!!!

连接报错

 - sudo service docker stop
 - sudo rm /var/lib/docker/network/files/local-kv.db
 - sudo service docker start
Ubuntu16.04下离线安装docker和使用docker 安装docker dpkg指定安装路径 安装好docker以后,需要切换一些源 docker常用命令 删除/停止等命令 创建Docker用户组,避免使用sudo 查看DOCKER的一些信息 一个例子 docker搭建爬虫环境 网上直接pull下一个Images 自己做的image 安装docker 自己的电脑安装官网的安装没有安装成功,可能是没法上外网的原因,如果你... 阅读详情

相关推荐

docker ,nvidia-docker,docker-compose和nvidia-docker-compose的安装配置

预先安装:Ubuntu14.04,SSH,GIT,CUDA-8.0一、安装docker安装最新版// 1. 安装必要的一些系统工具 sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common // 2. 安装GPG证书 curl -f...

大白机器人的博客 2822

Docker 入门到实战教程(一)介绍Docker

一. Docker简介1.1 什么是虚拟化?在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务...

李浩东的博客 90万+

hw_des_descfb_www.2hw3.com_AES_2020_

hw2 2020/05/01hw3 2020/05/14hw4 2020/05/23hw3被坑了 不然应该能更快完成的其他也没什么了 总结了一下本人该学期的作业完成情况

docker简介、安装、基础知识

Docker的出现使我们开发的软件可以“带环境安装”,即安装的时候,可以把原始环境一模一样的复制过来,在自己的机器上可以运行,在别人的机器上也可以运行。Docker镜像是分层的,而如果每次传输都使用全量文件(所以用ftp的方式并不适合),显然不经济,必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。解析:指定镜像作者信息,即镜像的Author属性。4.Docker是一个轻量级的容器,我们可以把环境交给Docker管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上。

2301_82330629的博客 5万+

AST实战:解密Akamai混淆JS代码的完整流程

本文详细解析了如何使用AST技术解密Akamai混淆的JS代码,包括定位关键代码、AST解混淆实战步骤及常见问题解决方案。通过实际案例演示了从混淆代码到清晰逻辑的完整处理流程,并提供了工具推荐和法律合规建议,帮助开发者有效应对反爬虫技术。

weixin_33725722的博客 313

从零开始构建AURIX TC397开发环境:硬件选型与IDE配置全攻略

本文详细介绍了如何从零开始构建AURIX TC397开发环境,涵盖硬件选型、IDE配置及外设驱动开发等关键步骤。针对TriCore架构的高性能特性,提供了开发板选型建议、AURIX Development Studio(ADS)安装配置指南,以及GPIO和CAN FD驱动的实战代码示例,帮助开发者快速上手TC397系列微控制器的开发工作。

7up55的博客 203

【Docker】初识docker 基本概念及安装使用(巨详细版),网络安全零基础入门到精通实战教程!

是一个开源的应用容器引擎,基于go语言开发并遵循apache2.0协议开源是在Linux容器里运行应用的开源工具是一种轻量级的 “虚拟机”Docker的容器技术,可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器市场占有率最高Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

Cairo_A的博客 5万+

别再为EPI形变头疼了!FSL的topup+eddy实战保姆级教程(含AP/PA数据采集要点)

本文详细介绍了如何使用FSL的topup和eddy工具解决EPI形变问题,包括数据采集要点、参数设置和实战操作步骤。通过AP/PA双编码数据和精确的形变场估计,有效矫正MRI图像中的几何畸变,提升弥散数据质量。特别适合需要处理高场强MRI数据的研究人员和技术人员。

weixin_28725949的博客 399

Docker详解

Docker详解 一、Docker基础 1、Docker简介 Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互隔离,性能开销极低。 Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。 2、

李宥的博客 9万+

PXE 批量安装 Ubuntu 20.04

原文链接:https://www.cpweb.top/1698 一、介绍   Ubuntu 20.04 的服务器安装程序支持新的操作模式:自动安装(automated installation)。自动安装可以通过自动安装配置提前回答所有这些配置问题,并使安装过程无需任何交互即可运行。   在 Ubuntu 18.04 中,用的应答文件是 preseeds(预配置文件),它基于 debian-installer(aka di)来实现自动安装的。需要注意的是,如果你使用的是 cobbler,那你应....

supahero的博客 1万+

RK3588-NANOPC-T6移植ubuntu+xenomai内核

更具网址下载相应的内核。导入到开发板并执行内核。

qq_42007446的博客 572

Docker基本管理

是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源是在Linux容器里运行应用的开源工具是一种轻量级的“虚拟机"Docker的容器技术可以在任意一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应用组件的封装、发布、部署、运行等生命局期的管理,达到应用组件级别的“一次封装,到处运行”的目的这里的组件,既可以是一个应用,也可以 是一套服务,甚至是一个完整的操作系统

sukapulai的博客 1574

ANSYS Fluent热边界条件避坑指南:为什么你的自然对流计算结果总出错?

本文深入剖析了在ANSYS Fluent中进行自然对流仿真时,导致计算结果出错或发散的核心原因与解决方案。重点解析了重力项与操作密度设置、Boussinesq与不可压缩理想气体模型的抉择、以及压力离散格式(推荐Body Force Weighted)这三大关键雷区,并结合电子机箱散热等实战案例,提供了一套稳定可靠的仿真设置流程与调试技巧。

weixin_28396629的博客 738

【docker】linux系统docker的安装及使用

然后,只要一个命令,就能同时启动/关闭这些容器。阿里云:http:**//mirrors.aliyun.com/docker-ce/linux/centos/**docker-ce.repo 清华大学源:https:**//mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/**docker-ce.repo。注:所有docker容器的卷,没有指定目录情况下(具名挂载和匿名挂载),都在 /var/lib/docker/volumes/ 下。

Best_lgx的博客 8708

基于Arduino的智能垃圾桶

通过本次简单的Arduino智能垃圾桶小实验可以快速了解Arduino的基本用法 1、材料准备 Arduino UNO HC-SR04超声波模块 SG90舵机 杜邦线 电源 电脑 2、代码分析 电机的控制 #include<Servo.h> #define duoji D5 Servo myduoji; void setup() { myduoji.attach(duoji); //舵机连接 Serial.begin(115200); } void loop() { myduoji.w

weixin_41679960的博客 1万+

《使用R包ggtree进行进化树的绘制与美化》

都2023年了,才去使用Y叔早在2018年发表的进化树构建利器——ggtree。刚好最近在做基因家族分析,进化树的构建与美化确实有点麻烦,先前使用MEGA11进行了绘制,但图像简陋,于是导出了nwk文件,准备使用其他软件进行美化。这里,我使用ggtree包进行操作。

沉香best的博客 6893

Linux docker及docker-compose安装教程

本文介绍了Linux系统中Docker和Docker-Compose的安装方法。在x86架构下,提供了联网和离线两种安装方式:对于Ubuntu系统可使用阿里云源在线安装,CentOS/AnolisOS系统可通过官方仓库或阿里镜像源安装;离线安装则需下载对应版本的安装包进行手动配置。同时详细说明了Docker服务配置、权限设置和开机自启等步骤。对于Docker-Compose的安装,给出了在线下载最新版本的命令。文中包含完整的代码示例,涵盖从安装到验证的全部流程,适用于不同Linux发行版的Docker环境部

qq_35861227的博客 4066

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java技术栈 —— Docker入门

docker的本意是码头工人。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。[1]一、参考文章或视频链接[1]《Docker》- 百度百科[2]Docker - 官方。

键盘国治理专家的博客 2074

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

docker in docker使用方式

挂载主机docker文件 方式1:挂载主机上的docker.sock以及docker二进制文件 docker run -it \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/usr/bin/docker \ centos docker version 方式2:挂载主机docker.sock并在容器中安装docker客户端 docker run -it \ -v /var/run/docker.sock

IT 4268

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Docker in docker 实现

Docker in docker 文章目录Docker in docker原理实现(centos7)常见问题参考 在docker容器内运行docker一般是不被倡导的。但有些场景和业务上,需要在容器内使用docker对组件进行编译构建,不同的组件所需的依赖有不一致,不同自建相互之间的依赖很可能相互干扰(比如需要同一个组件的不同版本),因此docker-in-docker的解决方案被提出来了, 一般被用于CI或集成测试。 原理 通过将主机上的docker.sock挂载至容器内,实现共享主机的docker.so

SinkRain 2万+

docker in docker 在CI中应用解析

docker里嵌套运行docker,本文讲解其在jenkins和gitlab-runner 种的调用流程。

专注于输出大概有用的软硬件技术! 1585

此docker compose非彼docker-compose

维度docker-composedocker compose安装方式独立可执行文件(standalone)Docker 插件(plugin)对应版本Compose V1Compose V2命令格式短横线连接(docker-compose)空格分隔(docker compose)集成度独立工具,需单独安装集成在 Docker CLI 中推荐程度旧版,逐步淘汰官方推荐 ✅依赖独立二进制文件依赖 docker-compose-plugin。兼容性:docker-compose 在旧版本中更稳定,适合遗留系统。

爱码少年 00fly.online 的博客 2万+

dind(docker in docker)学习

docker in docker 说白了,就是在docker容器内启动一个docker daemon,对外提供服务。 优点在于: 镜像和容器都在一个隔离的环境,保持操作者的干净环境。 想到了再补充 :) 一:低版本启动及访问 启动1.12.6-dind docker run --privileged -d --name mydocker docker:1.12.6-dind 在其他容器访问 d...

IT老吴的博客 1万+

ubuntu20.04 安装docker,docker-compose

ubuntu20.04 安装docker,docker-compose

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 6428

Ubuntu 安装docker docker-compose

docker-compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose,你可以使用 YAML 文件来配置应用程序的服务、网络和卷。它简化了复杂应用的配置和启动过程,使得管理和部署多个相互依赖的容器变得非常简单。默认情况下,只有 root 用户或 docker 用户组的成员才能运行 Docker 命令。添加 Docker 的官方 GPG 密钥。将当前用户加入 docker 用户组。验证 Docker 是否安装成功。安装docker-compose。

hudeyong926的专栏 2231

ARM架构下安装新版docker及docker-compose

【代码】ARM架构下安装新版docker及docker-compose。

qq_35861227的博客 3576
上一篇: zabbix后续
下一篇: mfs
GodDevin
博客等级 码龄9年 39粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值