容器技术-docker

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值