欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > Docker

Docker

2024/10/24 21:30:16 来源:https://blog.csdn.net/2302_81167603/article/details/142446456  浏览:    关键词:Docker

实验部分

1、docker的部署过程

配置软件仓库

[root@docker-node1 etc]# cd /etc/yum.repos.d/

[root@docker-node1 yum.repos.d]# ls redhat.repo rhel9.repo

[root@docker-node1 yum.repos.d]# vim docker.repo

[root@docker-node1 yum.repos.d]# cd

[root@docker-node1 ~]# yum install docker-ce -y

安装docker-ce并启动服务

[root@docker-node1 ~]# vim /usr/lib/systemd/system/docker.service

[root@docker-node1 ~]# systemctl enable --now docker

Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

[root@docker-node1 ~]# docker info

启动容器

[root@docker-node1 ~]# docker run -d --name test --rm -p 80:8080 timinglee/mari o:latest 1b4e3a695d37c76a4e1bdcb9a341971f0c893350e2b46b4861605f02b55a72f5

2、Docker的基本操作

查看镜像

[root@docker-node1 ~]# docker image inspect nginx:1.23

导出镜像

#保存镜像

[root@Docker-node1 ~]# docker image save nginx:latest -o nginx-latest.tar.gz

[root@Docker-node1 ~]# docker image save nginx:latest nginx:1.26-alpine -o nginx.tag.gz

#保存所有镜像

[root@Docker-node1 ~]# docker save docker images | awk 'NR>1{print $1":"$2}' - o images.tar.gz

[root@Docker-node1 ~]# docker ps #查看当前运行容器

[root@Docker-node1 ~]# docker ps -a #查看所有容器

[root@Docker-node1 ~]# docker inspect busybox #查看容器运行的详细信息

[root@Docker-node1 ~]# docker stop busybox #停止容器

[root@Docker-node1 ~]# docker kill busybox #杀死容器,可以使用信号

[root@Docker-node1 ~]# docker start busybox #开启停止的容器

[root@Docker-node1 ~]# docker rm centos7 #删除停止的容器

[root@Docker-node1 ~]# docker rm -f busybox #删除运行的容器

[root@Docker-node1 ~]# docker container prune -f #删除所有停止的容器

容器内容提交

复制

[root@docker-node1 ~]# docker cp dbbfile exam:/dbbfile

Successfully copied 1.54kB to exam:/dbbfile

查看日志

3、构建参数使用

[root@docker-node1 ~]# mkdir docker/

[root@docker-node1 ~]# cd docker/

[root@docker-node1 docker]# touch leefile

[root@docker-node1 docker]# vim Dockerfile

[root@docker-node1 docker]# touch leefile{1..3}

[root@docker-node1 docker]# tar zcf leefile.gz leefile

[root@docker-node1 docker]# vim Dockerfile

4、docker镜像构建

配置centos7环境

[root@docker-node1 docker]# dnf install httpd -y

[root@docker-node1 docker]# vim /etc/httpd/conf/httpd.conf

[root@docker-node1 docker]# systemctl start httpd

[root@docker-node1 docker]# mkdir /var/www/html/rhel7.9

[root@docker-node1 docker]# mount /dev/sr1 /var/www/html/rhel7.9/

mount: /var/www/html/rhel7.9: WARNING: source write-protected, mounted read-only.

[root@docker-node1 ~]# docker inspect centos

[root@docker-node1 ~]# docker commit -m "add repo" centos centos:repo sha256:d3405633300686ecee84f9ff8e373f30655fde27fd7d18e2fb7b9fcb979302c1

[root@1a93258b3d66 ~]# exit

exit

[root@docker-node1 docker]# docker rm centos centos

建立构建目录,编写构建文件

[root@docker-node1 docker]# vim Dockerfile

通过dockerfile生成镜像

测试镜像可用性

[root@docker-node1 docker]# docker run -d --name checkimage nginx 808059cabaf8fe85190327e6d47aaab1154a8e1167a90106d196a1857940ec26

5、镜像优化

方法1.缩减镜像层

[root@docker-node1 docker]# vim Dockerfile

方法2.多阶段构建

[root@docker-node1 docker]# vim Dockerfile

方法3.使用最精简镜像

[root@docker-node1 docker]# vim Dockerfile

6、docker简单私有仓库的搭建

[root@docker-node1 ~]# docker run -d -p 5000:5000 --restart=always registry 402feafcb10ecef67534fc3bc6c35a1825031ad1fa3c4fe18a186869107b6878

[root@docker-node1 ~]# docker tag nginx:v4 172.25.254.10:5000/nginx:v4

[root@docker-node1 ~]# vim /etc/docker/daemon.json

[root@docker-node1 ~]# systemctl start docker

[root@docker-node1 ~]# docker inspect ecstatic_lamport

[root@docker-node1 docker]# curl 172.25.254.10:5000/v2/_catalog {"repositories":["nginx"]}

[root@docker-node1 repositories]# docker tag busybox:latest 172.25.254.10:5000/busybox:latest [root@docker-node1 repositories]# docker push 172.25.254.10:5000/busybox:latest

The push refers to repository [172.25.254.10:5000/busybox] d51af96cf93e: Pushed latest: digest: sha256:28e01ab32c9dbcbaae96cf0d5b472f22e231d9e603811857b295e61197e40a9b size: 527

[root@docker-node1 docker]# curl 172.25.254.10:5000/v2/_catalog

{"repositories":["busybox","nginx"]}

7、docker仓库数据传输加密

#生成认证key和证书

[root@docker-node1 ~]# vim /etc/docker/daemon.json  删除

[root@docker-node1 ~]# systemctl restart docker

[root@docker-node1 ~]# mkdir certs

[root@docker-node1 ~]# vim /etc/hosts

[root@docker-node1 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/timinglee.org.key -addext "subjectAltName = DNS:reg.timinglee.org" -x509 -days 365 -out certs/timinglee.org.crt

启动registry仓库

[root@docker-node1 ~]# mkdir -p /etc/docker/certs.d/reg.timinglee.org -p

[root@docker-node1 certs]# cp /root/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt

[root@docker-node1 ~]# ls /etc/docker/certs.d/reg.timinglee.org/ca.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt

[root@docker-node1 ~]# curl -k https://reg.timinglee.org/v2/_catalog {"repositories":["nginx"]}

8、docker仓库用户认证

[root@docker-node1 ~]# yum install httpd-tools -y

[root@docker-node1 ~]# mkdir auth

[root@docker-node1 ~]# htpasswd -Bc auth/.htpasswd lee

New password:

Re-type new password:

Adding password for user lee

[root@docker-node1 ~]# cat auth/.htpasswd lee:$2y$05$hKXaGAu6XKmGmnJg080JM.6MBSTd4N8dWsRb6BYzvHmYBdI1rxR2G [root@docker-node1 ~]# htpasswd -B auth/.htpasswd hyl

New password:

Re-type new password:

Adding password for user hyl

[root@docker-node1 ~]# cat auth/.htpasswd lee:$2y$05$hKXaGAu6XKmGmnJg080JM.6MBSTd4N8dWsRb6BYzvHmYBdI1rxR2G hyl:$2y$05$JZ33JbqB.AubdM26dpNjIuBd/7TXjuvFHCwuKbiB4WADDuUWS.

[root@docker-node1 ~]# docker run -d -p 443:443 --restart=always -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/timinglee.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/timinglee.org.key -v /root/auth:/auth -e REGISTRY_AUTH=htpasswd -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/.htpasswd registry 02085041efd1de26bd3916f012662275b20ce8191c8326b65fa25ac2cc20ba71

[root@docker-node1 ~]# curl -k https://reg.timinglee.org/v2/_catalog -u hyl:hyl {"repositories":["nginx"]}

9、docker-harbor仓库的搭建

[root@docker harbor]# vim harbor.yml

[root@docker-node1 harbor]# ll /data/

总用量 0 drwxr-xr-x 3 root root 18 9月 22 17:56 secret

[root@docker-node1 harbor]# cp /root/certs/ /data/ -r

[root@docker-node1 harbor]# ls /data/

certs secret

[root@docker-node1 harbor]# ls 

common config

[root@docker-node1 harbor]# ls /data/certs/

timinglee.org.crt timinglee.org.key

[root@docker-node1 harbor]# ./install.sh --with-chartmuseum

#管理harbor的容器

本地解析

C:\Windows\System32\drivers\etc\hosts

测试

#未登录上传失败

登录

[root@docker-node1 harbor]# docker logout reg.timinglee.org

Removing login credentials for reg.timinglee.org

[root@docker-node1 harbor]# docker login reg.timinglee.org
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
​
Login Succeeded

#私有仓库作为默认下载仓库

[root@docker-node1 reg.timinglee.org]# cp /data/certs/timinglee.org.crt ^C

[root@docker-node1 reg.timinglee.org]# cd ..

[root@docker-node1 certs.d]# ls reg.timinglee.org

[root@docker-node1 certs.d]# cd ..

[root@docker-node1 docker]# ls certs.d daemon.json

[root@docker-node1 docker]# vim daemon.json

[root@docker-node1 docker]# systemctl restart docker

[root@docker-node1 docker]# docker info

[root@docker-node1 harbor]# docker pull timinglee/nginx:v4

v4: Pulling from timinglee/nginx Digest:

sha256:e7b51e47f6e4e415ef6f1ea2435aaa6302173858e4e46dc663e4b929608bdeb8

Status: Downloaded newer image for timinglee/nginx:v4

docker.io/timinglee/nginx:v4

#若出现问题

[root@docker-node1 docker]# docker pull timinglee/nginx:v4

Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded ( Client.Timeout exceeded while awaiting headers)

10、docker的webUI工具

#访问

[root@docker-node1 1panel-v1.10.13-lts-linux-amd64]# 1pctl user-info

面板地址: http://$LOCAL_IP:4444/c2c56e339d

面板用户: 23e19dd318 面板密码: !@#$%*_,

提示:修改密码可执行命令:1pctl update password

11.docker原生网络及自定义桥接网络

docker原生bridge网路

[root@docker-node1 ~]# grubby --update-kernel ALL --args iptables=true

[root@docker-node1 ~]# reboot

[root@docker-node1 ~]# cd 1panel-v1.10.13-lts-linux-amd64/

[root@docker-node1 1panel-v1.10.13-lts-linux-amd64]# ls 1panel 1panel.service

1pctl docker install.log install.sh LICENSE README.md

#恢复默认网络

不使用iptables

[root@docker-node1 harbor]# nft list ruleset

docker原生网络host---直连网络

[root@docker-node1 harbor]# docker rm webserver webserver

docker原生网络none

docker的自定义网络

自定义桥接网络---net

原生的桥接网络当中没有dns插件

##webserve、test1都退出

[root@docker-node1 ~]# docker network create mynet1 -d bridge cb9b2d5c2690cc8214a6ee32c813d7593614f0c79c5ba3758ed79523b45f95de

[root@docker-node1 ~]# docker network ls

NETWORK ID NAME DRIVER SCOPE

fe4b1832ecca bridge bridge local

81e88a23fb22 host host local

cb9b2d5c2690 mynet1 bridge local

0ca32642ad25 none null local

12、docker容器间的网络通信

[root@docker-node1 ~]# docker network create mynet2 -d bridge fba196630d53dc8efd1f8b4bebadaafcbc4ae2bffad2028a206a3cf3629e6285

[root@docker-node1 ~]# iptables -nL

[root@docker-node1 ~]# docker rm test1

test1

[root@docker-node1 ~]# docker rm webserver

webserver

/ # ping webserver ping: bad address 'webserver'

##两个容器用不同的站

[root@docker-node1 ~]# docker network connect mynet1 webserver

###两个容器用同一个站

[root@docker-node1 ~]# docker rm test1

test1

[root@docker-node1 ~]# docker rm webserver

webserver

###走回环接口

[root@docker-node1 ~]# docker rm test1

test1

[root@docker-node1 ~]# docker rm webserver

webserver

[root@docker-node1 ~]# docker run -it --name webserver --network container:test1 centos:7

####mysql、php

[root@docker-node1 ~]# docker load -i mysql-5.7.tar.gz

[root@docker-node1 ~]# docker load -i phpmyadmin-latest.tar.gz

##暴露端口

13、docker中容器内外网访问原理

内网访问外网

[root@docker-node1 ~]# docker rm -f mysq

l mysql

[root@docker-node1 ~]# docker rm -f mysqladmin

mysqladmin

[root@docker-node1 ~]# docker run -d --name test --rm nginx -p80:80 58183c0e503d65cf585a405df66412d67d9ea5825957f9d3101d7aff7992c295

[root@docker-node1 ~]# ps ax | grep docker-proxy 12095 pts/1 R+ 0:00 grep --color=auto docker-proxy

rhel9----默认nft

外网访问内网----haproxy、火墙策略双保险

[root@docker-node1 ~]# docker inspect test

[root@docker-node1 ~]# ps ax

14、docker中容器的跨主机通

####实验环境 双主机双网卡

##docker-node2配置docker环境

##安装docker包

[root@docker-node2 ~]# ls
docker.tar.gz
[root@docker-node2 ~]# tar zxf docker.tar.gz
[root@docker-node2 ~]# ls
containerd.io-1.7.20-3.1.el9.x86_64.rpm
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm
docker-ce-27.1.2-1.el9.x86_64.rpm
docker-ce-cli-27.1.2-1.el9.x86_64.rpm
docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
docker.tar.gz
[root@docker-node2 ~]# dnf install *.rpm -y

##启动docker

[root@docker-node2 ~]# systemctl start docker
[root@docker-node2 ~]# docker info

###打开网卡混杂模式

eth1这款网卡在vmware中要设定为仅主机模式

[root@docker-node1 ~]# ip link set eth1 promisc on
[root@docker-node1 ~]# ip link set up eth1
[root@docker-node1 ~]# nmcli networking
enabled

[root@docker-node1 ~]# docker network create -d macvlan --subnet 4.4.4.0/24 \
> --gateway 4.4.4.4 \
> -o parent=eth1 mynet1

f17541a6acfc30394014da67d4c585c07a4eb372431633430970a81ee23869c5
[root@docker-node1 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
fe4b1832ecca   bridge    bridge    local
81e88a23fb22   host      host      local
f17541a6acfc   mynet1    macvlan   local
0ca32642ad25   none      null      local

 15、docker数据卷简介及bindmount模式

默认数据卷

[root@docker-node1 ~]# cd /var/lib/docker/
[root@docker-node1 docker]# ls
buildkit    engine-id  network   plugins   swarm  volumes
containers  image      overlay2  runtimes  tmp
[root@docker-node1 docker]#  cd volumes/

bind mount 数据卷------限制移植性

[root@docker-node1 volumes]# cd
[root@docker-node1 ~]# mkdir /lee
[root@docker-node1 ~]# touch /lee/leefile{1..5}
[root@docker-node1 ~]# ls /lee/
leefile1  leefile2  leefile3  leefile4  leefile5
[root@docker-node1 ~]# docker run -it --rm --name test -v /lee:/data1:rw -v /etc/passwd:/data2/passwd busybox
/ # ls
bin    data1  data2  dev    etc    home   lib    lib64  proc   root   sys    tmp    usr    var
/ # ls data1
leefile1  leefile2  leefile3  leefile4  leefile5
/ # touch data1/leefile6
/ # ls data1
leefile1  leefile2  leefile3  leefile4  leefile5  leefile6

/ #  vi /data2/passwd   读写挂载

此文件不能随意改动

[root@docker-node1 ~]# docker run -it --rm --name test -v /lee:/data1:rw -v /etc/passwd:/data2/passwd:ro busybox
/ # vi /data2/passwd

16、docker数据卷的managed模式

[root@docker-node1 ~]# docker run -d --rm --name mysql -e MYSQL_ROOT_PASSWORD=lee mysql:5.7
ed10fa495167c7bc8730a357cdcefc5d35925006f4d7c144f18e865f4b2854af
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE       COMMAND        CREATED      STATUS     PORTS            NAMES
ed10fa495167   mysql:5.7   "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   3306/tcp, 33060/tcp   mysql
[root@docker-node1 ~]# docker inspect mysql

清理未使用的 Docker 数据卷

[root@docker-node1 volumes]# docker volume create  mysqldate
mysqldate
[root@docker-node1 volumes]# ll /var/lib/docker/volumes/
总用量 32
drwx-----x 3 root root     19  9月 22 17:19 95bb492c95b5461dcffc96022974557c932cea36f721d7505fa                                          3b19a4e37726a
brw------- 1 root root 253, 0  9月 22 19:09 backingFsBlockDev
drwx-----x 3 root root     19  9月 23 17:24 d6cc0eddc22aaf80c5198e791b005cbee008e23abdc758374d9                                          d2d579c935cb1
-rw------- 1 root root  65536  9月 23 17:38 metadata.db
drwx-----x 3 root root     19  9月 23 17:38 mysqldate

[root@docker-node1 volumes]# docker rm -f mysql
mysql
[root@docker-node1 volumes]# docker run -d --rm --name mysql -e MYSQL_ROOT_PASSWORD=lee -v mysqldate:/var/lib/mysql mysql:5.7
e73e7fe026a57c57153e8db946685cef27d993e1eeb7132620d3e7cd5354e8ac
[root@docker-node1 volumes]# docker inspect mysql

[root@docker-node1 volumes]# cd mysqldate/
[root@docker-node1 mysqldate]# ls
_data
[root@docker-node1 mysqldate]# cd _data/
[root@docker-node1 _data]# ls
auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql       performance_schema  public_key.pem              ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       mysql.sock  private_key.pem     server-cert.

###保持持久化

mysql停止后数据还在

[root@docker-node1 _data]# docker stop mysql
mysql
[root@docker-node1 _data]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@docker-node1 _data]# cd /var/lib/docker/volumes/
[root@docker-node1 volumes]# ls
95bb492c95b5461dcffc96022974557c932cea36f721d7505fa3b19a4e37726a  metadata.db
backingFsBlockDev                                                 mysqldate
d6cc0eddc22aaf80c5198e791b005cbee008e23abdc758374d9d2d579c935cb1
[root@docker-node1 volumes]# cd mysqldate/
[root@docker-node1 mysqldate]# ls
_data
[root@docker-node1 mysqldate]# cd _data/
[root@docker-node1 _data]# ls
auto.cnf    client-cert.pem  ibdata1      mysql               private_key.pem  server-key.pem
ca-key.pem  client-key.pem   ib_logfile0  mysql.sock          public_key.pem   sys
ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem

 ###删除数据卷

bind mount 数据卷和 docker managed 数据卷的对

17、docker数据的备份及迁移

备份数据卷

 #建立容器并指定使用卷到要备份的容器

[root@docker ~]# docker run --volumes-from test \
-v `pwd`:/backup busybox \ # 把当前目录挂在到容器中用于和容器交互保存要备份的容器
tar zcf /backup/data1.tar.gz /data1 # 备份数据到本地

数据恢复

docker run -it --name test -v leevol1:/data1 -v `pwd`:/backup busybox /bin/sh - c "tar zxf /backup/data1.tar.gz;/bin/sh"
/ # ls
backup data1 etc lib proc sys usr
bin dev home lib64 root tmp var
/ # cd data1/ # 查看数据迁移情况
/data1 # ls
index.html leefile1

18、docker中容器的安全加固思路

Docker 的安全优化   docker---安全隔离   虚拟化---完全隔离

[root@docker-node2 ~]# mount -t cgroup
[root@docker-node2 ~]# mount -t cgroup2
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recur siveprot)

[root@docker-node1 ~]# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"
[root@docker-node1 ~]# reboot
[root@docker-node2 ~]# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"
[root@docker-node2 ~]# reboot

隔离机制 

查看id

[root@docker-node1 ~]# docker inspect test | grep Pid
            "Pid": 2337,
            "PidMode": "",
            "PidsLimit": null,
[root@docker-node1 31a23dcba6e722abfa35b88dcc4ead9bc5de6e7ee506c23c4900a01d1dc1a8ca]#  cat tasks
2337
2382
2383
2384
2385

19、docker中对容器资源限制的原理及对cpu资源限制的方法

限制cpu的使用量

[root@docker-node1 ~]# docker run -it --rm --name test \
> --cpu-period 100000 \
> --cpu-quota 20000 ubuntu

root@fec0c26dc0fa:/#  dd if=/dev/zero of=/dev/null &
[1] 9
root@fec0c26dc0fa:/# top

限制cpu的优先级

[root@docker-node1 cpu]# echo 0 > /sys/devices/system/cpu/cpu1/online
[root@docker-node1 cpu]# echo 0 > /sys/devices/system/cpu/cpu2/online
[root@docker-node1 cpu]# echo 0 > /sys/devices/system/cpu/cpu3/online

开启容器与其争抢

20、docker中对于内存使用的限制

 #####红帽9软件仓库解决办法

安装libcgroup

[root@docker-node1 ~]# dd if=/dev/zero of=/dev/shm/bigfile bs=1M count=200
记录了200+0 的读入
记录了200+0 的写出
209715200字节(210 MB,200 MiB)已复制,0.582844 s,360 MB/s
 

建立x1控制器

[root@docker-node1 x1]# echo 209715200 > memory.memsw.limit_in_bytes

[root@docker-node1 x1]# docker run -d  --name test   --memory 200M --memory-swap 200M nginx
af96d658fd6e1685cf9d8935022c7f3f9eef199bfc5712e0031ff4d4b72d928e
[root@docker-node1 x1]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS     NAMES
af96d658fd6e   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   80/tcp    test

[root@docker-node1 ~]# cgexec -g memory:docker/af96d658fd6e1685cf9d8935022c7f3f9eef199bfc5712e0031ff4d4b72d928e/ \
> dd if=/dev/zero of=/dev/shm/bigfile bs=1M count=100
记录了100+0 的读入
记录了100+0 的写出
104857600字节(105 MB,100 MiB)已复制,0.319357 s,328 MB/s
[root@docker-node1 ~]# cgexec -g memory:docker/af96d658fd6e1685cf9d8935022c7f3f9eef199bfc5712e0031ff4d4b72d928e/ dd if=/dev/zero of=/dev/shm/bigfile bs=1M count=150
记录了150+0 的读入
记录了150+0 的写出
157286400字节(157 MB,150 MiB)已复制,0.183725 s,856 MB/s
[root@docker-node1 ~]# cgexec -g memory:docker/af96d658fd6e1685cf9d8935022c7f3f9eef199bfc5712e0031ff4d4b72d928e/ dd if=/dev/zero of=/dev/shm/bigfile bs=1M count=190
记录了190+0 的读入
记录了190+0 的写出
199229440字节(199 MB,190 MiB)已复制,0.169126 s,1.2 GB/s
[root@docker-node1 ~]# cgexec -g memory:docker/af96d658fd6e1685cf9d8935022c7f3f9eef199bfc5712e0031ff4d4b72d928e/ dd if=/dev/zero of=/dev/shm/bigfile bs=1M count=200
已杀死
[root@docker-node1 ~]#
 

[root@docker-node1 ~]# docker rm -f test
test

[root@docker-node1 ~]# docker run -d --name test1 --rm nginx
becc5c7be5df5ce1ae74b60370d9c31e169718ba434dc6f1ff28d15502713572
 [root@docker-node1 ~]# cgexec -g memory:docker/becc5c7be5df5ce1ae74b60370d9c31e169718ba434dc6f1ff28d15502713572/ dd if=/dev/zero of=/dev/shm/bigfile bs=1M count=200
记录了200+0 的读入
记录了200+0 的写出
209715200字节(210 MB,200 MiB)已复制,0.0727259 s,2.9 GB/s

[root@docker-node1 ~]# cgexec -g memory:docker/becc5c7be5df5ce1ae74b60370d9c31e169718ba434dc6f1ff28d15502713572/ dd if=/dev/zero of=/dev/shm/bigfile bs=1M count=500
记录了500+0 的读入
记录了500+0 的写出
524288000字节(524 MB,500 MiB)已复制,1.46611 s,358 MB/s

21、docker中对于磁盘io速录限制

###写数据位置

####运行速率

####限速

[root@docker-node1 ~]# docker run -it --rm --device-write-bps /dev/nvme0n1:30M ubuntu
root@127c406e7593:/# dd if=/dev/zero of=bigfile bs=1M count=500 oflag=direct
^C292+0 records in
292+0 records out
306184192 bytes (306 MB, 292 MiB) copied, 9.73781 s, 31.4 MB/s

22.docker容器的信息隔离

内存没有隔离开

###安装lxcfs  

####运行lxcfs并解决容器隔离性 

[root@docker-node1 mnt]# lxcfs /var/lib/lxcfs &

[root@docker-node1 mnt]# cd /var/lib/lxcfs/
[root@docker-node1 lxcfs]# ls
cgroup  proc  sys 

[root@docker-node1 lxcfs]# docker run -it --rm --name test \

-v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \

-v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw       \          

-v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw   \

-v /var/lib/lxcfs/proc/stat:/proc/stat:rw  \

-v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw   \

-v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw    \

-m 200M  \

ubuntu
root@0c3bf60890b9:/#

23.docker容器特权

使用容器时一些资源不能被修改

#####添加容器特权

 容器特权的白名单

24.docker-compose命令详解

[root@docker-node1 ~]# vim ~/.vimrc

[root@docker-node1 ~]# mkdir test
[root@docker-node1 ~]# cd test/
[root@docker-node1 test]# ls
[root@docker-node1 test]# vim docker-compose.yml

启动配置文件中定义的所有服务

 

可以使用 -d 参数在后台启动服务
可以使用-f 来指定yml文件

[root@docker-node1 test]# ls
docker-compose.yml
[root@docker-node1 test]# mv docker-compose.yml  timinglee.yml
[root@docker-node1 test]# ls
timinglee.yml
[root@docker-node1 test]# docker compose up -d
no configuration file provided: not found
[root@docker-node1 test]# docker compose -f timinglee.yml up -d
[+] Running 2/0
 ✔ Container test-testnode-1  Running                                                                             0.0s
 ✔ Container test-web-1       Running                   

docker-compose down : 停止并删除配置文件中定义的所有服务以及相关的网络和存储卷
docker-compose start :  启动已经存在的服务,但不会创建新的服务
docker-compose stop :   停止正在运行的服务
docker-compose restart :    重启服务

查看日志

构建和重新构建服务

[root@docker-node1 test]# cd /root/docker/
[root@docker-node1 docker]# ls
Dockerfile  leefile1  leefile3    nginx-1.22.1.tar.gz  nginx-1.26.2.tar.gz
leefile     leefile2  leefile.gz  nginx-1.23.tar.gz
[root@docker-node1 docker]# rm -fr /root/docker/*
[root@docker-node1 docker]# ls
[root@docker-node1 docker]# vim Dockerfile

[root@docker-node1 docker]# vim lee

[root@docker-node1 ~]# cd test/
[root@docker-node1 test]# ls
timinglee.yml
[root@docker-node1 test]# vim docker-compose.yml

[root@docker-node1 test]# docker compose down
[+] Running 3/3
 ✔ Container lee2        Removed                                                         10.2s
 ✔ Container lee1        Removed                                                         10.2s
 ✔ Network test_default  Removed                                                          0.3s
[root@docker-node1 test]# docker rmi test1
Untagged: test1:latest
Deleted: sha256:f59224b1ab289e217e27c834a55755a4fe1112ea361f406214cc6830e40de8da
[root@docker-node1 test]# docker rmi test2
Untagged: test2:latest
Deleted: sha256:a7b86343e8368d5ea65f55d502040869e830757473bd785a29ef50c40de1e81b

----可以指定构建

docker-compose pull
拉取配置文件中定义的服务所使用的镜像。
[root@docker test]# docker compose -f test.yml pull
[+] Pulling 2/2
test Pulled
ec562eabd705 Pull complete
docker-compose config
验证并查看解析后的 Compose 文件内容
[root@docker test]# docker compose -f test.yml config -q

25、docker容器编排中servers用法

[root@docker-node1 ~]# cd test/
[root@docker-node1 test]# ls
docker-compose.yml  timinglee.yml
[root@docker-node1 test]# vim docker-compose.yml


[root@docker-node1 test]# docker compose up -d
WARN[0000] Found orphan containers ([lee2]) for this project. If you removed or                  renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
[+] Running 1/0
 ✔ Container lee1  Running                                                0.0s
[root@docker-node1 test]# docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED        STATUS        PORTS     NAMES
2fa62fc9747a   test2     "/bin/sh -c 'sleep 1…"   19 hours ago   Up 19 hours             lee2
5e5b254285e6   test1     "/bin/sh -c 'sleep 1…"   19 hours ago   Up 19 hours             lee1
[root@docker-node1 test]# docker compose down
[+] Running 2/1
 ✔ Container lee1        Removed                                                                                 10.1s
 ! Network test_default  Resource is still in use                                                                 0.0s

[root@docker-node1 test]# vim docker-compose.yml 

 端口映射(ports

[root@docker-node1 test]# vim docker-compose.yml 

[root@docker-node1 test]# docker compose  down
[+] Running 2/2
 ✔ Container webserver   Removed                                                                                  0.2s
 ✔ Network test_default  Removed                                                                                    0.3s

环境变量(environment

 [root@docker-node1 test]# vim docker-compose.yml 

[root@docker-node1 test]# docker compose up -d
[+] Running 2/2
 ✔ Network test_default    Created                                                                                0.3s
 ✔ Container test-test1-1  Started                                                                                0.3s
[root@docker-node1 test]# docker ps
CONTAINER ID   IMAGE       COMMAND      CREATED    STATUS         PORT          NAMES
a277a1238c73   mysql:5.7   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   3306/tcp, 33060/tcp   test-test1-1
[root@docker-node1 test]# docker inspect test-test1-1

[root@docker-node1 test]# docker compose down
[+] Running 2/2
 ✔ Container test-test1-1  Removed                                                1.1s
 ✔ Network test_default    Removed                                                0.2s

存储卷(volumes

 [root@docker-node1 test]# vim docker-compose.yml 


[root@docker-node1 test]# docker inspect test-test1-1

[root@docker-node1 test]# docker compose down
[+] Running 2/2
 ✔ Container test-test1-1  Removed                                                        1.6s
 ✔ Network test_default    Removed                                                        0.2s

网络(networks

默认建立

 [root@docker-node1 test]# vim docker-compose.yml

#使用本机自带bridge网络

 [root@docker-node1 test]# vim docker-compose.yml

none

 [root@docker-node1 test]# vim docker-compose.yml

自定义

 [root@docker-node1 test]# vim docker-compose.yml

26、docker-compose 中网络设定

 [root@docker-node1 test]# vim docker-compose.yml

external: true # 不建立新的网络而使用外部资源
name: bridge # 指定外部资源网络名字

自建网络

[root@docker-node1 test]# vim docker-compose.yml

指定ip

[root@docker-node1 test]# vim docker-compose.yml

27、docker-compose中数据卷设定------持久化

[root@docker-node1 test]# vim docker-compose.yml 

28、dockercompose企业示例

[root@docker-node1 ~]#  mkdir /var/lib/docker/volumes/conf
[root@docker-node1 ~]# dnf install haproxy -y --downloadonly --downloaddir=/mnt
[root@docker-node1 mnt]# cd etc/
[root@docker-node1 etc]# ls
haproxy  logrotate.d  sysconfig
[root@docker-node1 etc]# cd haproxy/
[root@docker-node1 haproxy]# ls
conf.d  haproxy.cfg
[root@docker-node1 haproxy]# cp haproxy.cfg /var/lib/docker/volumes/conf/
[root@docker-node1 haproxy]# cd /var/lib/docker/volumes/conf/
[root@docker-node1 conf]# ls
haproxy.cfg
[root@docker-node1 conf]# vim haproxy.cfg
[root@docker-node1 ~]# docker images | grep haproxy
haproxy                             2.3       7ecd3fda00f4   2 years ago     99.4MB
[root@docker-node1 test]# vim docker-compose.yml

[root@docker-node1 test]# echo webserver1 > /var/lib/docker/volumes/data_web1/_data/index.html
[root@docker-node1 test]# echo webserver2 > /var/lib/docker/volumes/data_web2/_data/index.html

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com