
容器技术-docker
把 docker 软件包添加到跳板机的自定义 yum 仓库中。
·
docker安装部署:
配置Yum仓库
把 docker 软件包添加到跳板机的自定义 yum 仓库中
[root@ecs-proxy s4]# rsync -av docker/ /var/localrepo/docker/
[root@ecs-proxy s4]# createrepo --update /var/localrepo
购买云主机配置
主机名 IP地址 最低配置
docker-0001 192.168.1.31 2CPU,4G内存
docker-0002 192.168.1.32 2CPU,4G内存
系统管理命令
命令 说明
docker version 查看服务器与客户端版本
docker info 查看 docker 服务配置信息
安装部署
[root@docker ~]# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf
[root@docker ~]# sysctl -p
[root@docker ~]# dnf install -y docker-ce
[root@docker ~]# systemctl enable --now docker
# 查看服务器与客户端版本
[root@docker ~]# docker version
Client: Docker Engine - Community
Version: 20.10.10
... ...
Server: Docker Engine - Community
Engine:
Version: 20.10.10
添加镜像加速
https://0e30bba5b71042c2a6cc25c5c6a5545f.mirror.swr.myhuaweicloud.com
[root@docker ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["这里配置镜像仓库加速器地址"],
"insecure-registries":[]
}
[root@docker ~]# systemctl restart docker
# 查看 docker 服务配置信息
[root@docker ~]# docker info
... ...
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://镜像仓库加速器/
Live Restore Enabled: false
镜像管理命令
镜像管理命令 说明 备注
docker images 查看本机镜像
docker pull 镜像名称:标签 下载镜像
docker save 镜像名称:标签 -o 备份文件名称 备份镜像为tar包 备份文件是 tar 格式
docker load -i 备份文件名称 导入备份的镜像文件 备份文件 tar 或 tar.xx 格式
docker history 镜像名称:标签 查看镜像的制作历史
镜像管理案例
myos.tar.xz 在本阶段/public/ 目录下,拷贝镜像包到 docker 主机
[root@ecs-proxy s4]# rsync -av public/myos.tar.xz 192.168.1.31:./
pull、images、history
# 下载 busybox:latest 镜像
[root@docker ~]# docker pull busybox:latest
# 查看本机镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 66ba00ad3de8 5 weeks ago 4.87MB
# 查看镜像的制作历史
[root@docker ~]# docker history busybox:latest
IMAGE CREATED CREATED BY SIZE
b539af69bc01 9 days ago /bin/sh -c #(nop) CMD ["sh"] 0B
<missing> 9 days ago /bin/sh -c #(nop) ADD file:069460fea045… 4.86MB
save、load
# 备份 rockylinux:8.5 镜像为 tar 包
[root@docker ~]# docker save busybox:latest -o busybox.tar
# 使用备份文件恢复镜像
[root@docker ~]# docker load -i myos.tar.xz
Loaded image: rockylinux:8.5
Loaded image: myos:8.5
Loaded image: myos:php-fpm
Loaded image: myos:nginx
Loaded image: myos:httpd
Loaded image: myos:latest
# 查看本机镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myos php-fpm 7124977c0b21 12 days ago 275MB
myos latest 1de38c85c2d1 3 weeks ago 4.67MB
myos nginx 5e45400d8e76 3 weeks ago 274MB
myos httpd 9245e660f88f 3 weeks ago 299MB
myos 8.5 621bfd7f9b46 3 weeks ago 249MB
busybox latest 66ba00ad3de8 5 weeks ago 4.87MB
rockylinux 8.5 210996f98b85 14 months ago 205MB
案例(2)
[root@docker-0001 ~]# docker load -i myos.tar.xz
[root@docker-0001 ~]# docker save rockylinux:8.5 -o rockylinux.tar
[root@docker-0001 ~]# scp rockylinux.tar 192.168.1.32:/root/
#-------------------------------------------------------------------#
[root@docker-0001 ~]# docker load -i rockylinux.tar
[root@docker-0001 ~]# docker history rockylinux:8.5
容器管理命令
容器管理命令 说明
docker run -it(d) 镜像名称:标签 创建容器
docker ps 查看容器的信息
docker inspect 镜像名称|容器名称 查询(容器/镜像)的详细信息
docker [start|stop|restart] 容器id 启动、停止、重启容器
docker exec -it 容器ID 启动命令 在容器内执行命令
docker cp 路径1 路径2 拷贝文件:路径格式(本机路径、容器ID/路径)
容器管理案例
run
# 创建一个容器
[root@docker ~]# docker run -it myos:8.5
[root@3aa1df05b795 /]# hostname
3aa1df05b795
[root@3aa1df05b795 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:13 pts/0 00:00:00 /bin/bash
root 19 1 0 15:13 pts/0 00:00:00 ps -ef
[root@3aa1df05b795 /]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@3aa1df05b795 /]# exit
# 创建后台容器
[root@docker ~]# docker run -itd myos:httpd
6d6884244a995791f8171efa3ce81be1e9e51bedf25c3a5a67bac8bb7bc019b0
# 创建名为web1的后台容器
[root@docker ~]# docker run -itd --name web1 myos:httpd
14b669a75a95e9ba590c37137abc9d828d2c769d46f69c35fb0e8cc98cc544c4
ps
# 查询容器状态
[root@docker ~]# docker ps
CONTAINER ID IMAGE ... ... STATUS PORTS NAMES
14b669a75a95 myos:httpd ... ... Up 25 minutes 80/tcp web1
6d6884244a99 myos:httpd ... ... Up 25 minutes 80/tcp hawking
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE ... ... STATUS PORTS NAMES
14b669a75a95 myos:httpd ... ... Up 25 minutes 80/tcp web1
6d6884244a99 myos:httpd ... ... Up 25 minutes 80/tcp hawking
47ded92f442f myos:8.5 ... ... Exited (0) yonath
[root@docker ~]# docker ps -aq
14b669a75a95
6d6884244a99
47ded92f442f
inspect
# 查询镜像的详细信息
[root@docker ~]# docker inspect myos:httpd
{ ......
"Cmd": [
"httpd",
"-DFOREGROUND"
],
......
}
# 查询容器的详细信息
[root@docker ~]# docker inspect 6d6884244a99 web1
[
{ ... ...
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
... ...
start、stop、restart
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE ... ... STATUS PORTS NAMES
14b669a75a95 myos:httpd ... ... Up 25 minutes 80/tcp web1
6d6884244a99 myos:httpd ... ... Up 25 minutes 80/tcp hawking
47ded92f442f myos:8.5 ... ... Exited (0) yonath
# 停止容器
[root@docker ~]# docker stop web1 6d6884244a99
web1
6d6884244a99
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE ... ... STATUS PORTS NAMES
14b669a75a95 myos:httpd ... ... Exited (0) web1
6d6884244a99 myos:httpd ... ... Exited (0) hawking
47ded92f442f myos:8.5 ... ... Exited (0) yonath
# 启动容器
[root@docker ~]# docker start web1
web1
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE ... ... STATUS PORTS NAMES
14b669a75a95 myos:httpd ... ... Up 6 seconds 80/tcp web1
6d6884244a99 myos:httpd ... ... Exited (0) hawking
47ded92f442f myos:8.5 ... ... Exited (0) yonath
# 重启容器
[root@docker ~]# docker restart 6d6884244a99
6d6884244a99
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE ... ... STATUS PORTS NAMES
14b669a75a95 myos:httpd ... ... Up 18 seconds 80/tcp web1
6d6884244a99 myos:httpd ... ... Up 3 seconds 80/tcp hawking
47ded92f442f myos:8.5 ... ... Exited (0) yonath
exec、cp
# 在容器内执行非交互命令
[root@docker ~]# docker exec -it web1 /bin/ls
index.html info.php
# 在容器内执行交互命令
[root@docker ~]# docker exec -it web1 /bin/bash
[root@487e19bb4ca3 ~]# exit
# 从容器内拷贝文件出来
[root@docker ~]# docker cp web1:/etc/httpd/conf/httpd.conf ./
[root@docker ~]# sed -ri "s,(Listen )80,\18080," httpd.conf
# 把文件拷贝到容器内
[root@docker ~]# docker cp httpd.conf web1:/etc/httpd/conf/
# 重启容器
[root@docker ~]# docker restart web1
# 查询容器详细信息
[root@docker ~]# docker inspect web1
{
"Networks": {
"bridge": {
"IPAddress": "172.17.0.2",
......
}
[root@docker ~]# curl http://172.17.0.2:8080/
Welcome to The Apache.
其他管理命令
管理命令 说明
docker rm 容器ID 删除容器
docker logs 容器ID 查看容器日志
docker tag 镜像ID:标签 镜像名称:新的标签 创建新的镜像名称和标签
docker rmi 镜像名称:标签 删除镜像(必须先删除该镜像启动的所有容器)
管理命令案例
rm、logs
# 删除容器
[root@docker ~]# docker rm 47ded92f442f
# 强制删除容器
[root@docker ~]# docker rm -f web1
# 删除所有容器
[root@docker ~]# docker rm -f $(docker ps -aq)
# 创建容器
[root@docker ~]# docker run -itd --name web myos:nginx
# 访问容器
[root@docker ~]# docker inspect web |grep IPAddress
[root@docker ~]# curl http://172.17.0.2/info.php
# 查看容器日志
[root@docker ~]# docker logs web
2023/01/17 15:51:49 [error] 6#0: *1 open() "/usr/local/nginx/html/info.php" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /info.php HTTP/1.1", host: "172.17.0.2"
rmi、tag
# 删除一个镜像
[root@docker ~]# docker rmi busybox:latest
Untagged: busybox:latest
# 已经创建容器的镜像无法删除
[root@docker ~]# docker rmi -f myos:nginx
Untagged: myos:nginx
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myos php-fpm 7124977c0b21 12 days ago 275MB
myos latest 1de38c85c2d1 3 weeks ago 4.67MB
<none> <none> 5e45400d8e76 3 weeks ago 274MB
myos httpd 9245e660f88f 3 weeks ago 299MB
myos 8.5 621bfd7f9b46 3 weeks ago 249MB
rockylinux 8.5 210996f98b85 14 months ago 205MB
# 给镜像设置一个新的名称标签
[root@docker ~]# docker tag 5e45400d8e76 myos:nginx
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myos php-fpm 7124977c0b21 12 days ago 275MB
myos latest 1de38c85c2d1 3 weeks ago 4.67MB
myos nginx 5e45400d8e76 3 weeks ago 274MB
myos httpd 9245e660f88f 3 weeks ago 299MB
myos 8.5 621bfd7f9b46 3 weeks ago 249MB
rockylinux 8.5 210996f98b85 14 months ago 205MB
简单镜像制作
# 使用基础镜像创建一个容器
[root@docker ~]# docker run -itd --name linux rockylinux:8.5
# 删除容器内的Yum配置文件
[root@docker ~]# docker exec -it linux rm -rf /etc/yum.repos.d
# 拷贝宿主机的Yum配置文件到容器内
[root@docker ~]# docker cp /etc/yum.repos.d linux:/etc/
# 在容器内安装工具软件包
[root@docker ~]# docker exec -it linux dnf install -y net-tools vim-enhanced tree bash-completion iproute procps-ng psmisc
# 清理缓存文件
[root@docker ~]# docker exec -it linux dnf clean all
# 停止容器
[root@docker ~]# docker stop linux
# 把容器制作成镜像
[root@docker ~]# docker commit linux mylinux:latest
sha256:7a4449e20f4c59d1f6c4db838b4724cbf63c8f4195513c5f17d053c7752891d5
# 查看新制作的镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mylinux latest b64da40467ae 3 seconds ago 249MB
rockylinux 8.5 210996f98b85 13 months ago 205MB
# 删除制作镜像的容器
[root@docker ~]# docker rm -f linux
linux
容器部署应用
- 部署 apache 服务
-
# 删除所有容器 [root@docker ~]# docker rm -f $(docker ps -aq) # 创建一个名为 myweb 的容器 [root@docker ~]# docker run -it --rm --name myweb mylinux:latest #----------------------------------------------------------- # 在容器内安装部署 apache [root@a7f9d0c3e3e2 /]# dnf install -y httpd [root@a7f9d0c3e3e2 /]# echo "Hello World ." >/var/www/html/index.html [root@a7f9d0c3e3e2 /]# cat /usr/lib/systemd/system/httpd.service [root@a7f9d0c3e3e2 /]# export LANG=C [root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND # 在另一个终端完成访问验证
- 为 apache 添加解析 php 文件支持
# ctrl + c 终止 httpd 服务运行
[root@a7f9d0c3e3e2 /]# dnf install -y php
[root@a7f9d0c3e3e2 /]# vim /etc/httpd/conf.modules.d/00-mpm.conf
11: LoadModule mpm_prefork_module ... ... # 去掉注释
23: # LoadModule mpm_event_module ... ... # 加注释
[root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND
# 服务不要关闭,在其他终端完成测试
- 验证配置
-
# 在另一个终端拷贝 public/info.php 到 docker 主机 [root@docker ~]# docker cp info.php myweb:/var/www/html/ [root@docker ~]# curl http://172.17.0.2/info.php <pre> Array ( [REMOTE_ADDR] => 172.17.0.1 [REQUEST_METHOD] => GET [HTTP_USER_AGENT] => curl/7.61.1 [REQUEST_URI] => /info.php ) php_host: 616e75df56ae 1229
更多推荐
所有评论(0)