Docker容器的部署安装与管理

Docker的自动化安装

Docker官方和国内daocloud都提供了一键安装的脚本,使得Docker的安装更加便捷。

官方的一键安装方式:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

国内 daocloud一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

执行上述任一条命令,耐心等待即可完成Docker的安装。

手动安装

首先在该网站下载对应的版本,然后将包传到机器里

[root@localhost ~]# rz -E rz waiting to receive. [root@localhost ~]# ls anaconda-ks.cfg docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm 安装 [root@localhost ~]# yum -y install docker-ce*

设置开机自启并重启

[root@localhost ~]# systemctl enable docker [root@localhost ~]# reboot ###之所以重启 Docker 会利用netfilter组件实现数据报文的转发,重启之后Docker会和netfilter配合的更加稳定

Docker 加速配置

 [root@localhost ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://hub-mirror.c.163.com [root@localhost ~]# cat /etc/docker/daemon.json {"registry-mirrors": ["http://hub-mirror.c.163.com"]} 指配置的镜像地址在哪,由他帮我们加速

测试Docker是否安装成功

[root@localhost ~]# docker run hello-world

docker镜像下载

Docker管理

Docker 三个重要概念:仓库 (Repository)、镜像 (image) 和 容器 (Container)

docker run –name MyWordPress –link db:mysql -p 8080:80 -d wordpressrun 关键字;–name 当前容器的名字;-p 映射端口;-d 放在后台运行;wordpress镜像

Docker 指令的基本用法:

docker + 命令关键字(COMMAND) + 一系列的参数

UFS:分层文件系统

Storage Driver:overlay、overlayv2、DM overlay overlayv2 >= 18.03 linuxkernel > 3.1 DM:稳定性较差

##常用命令关键字-基础命令 docker info 守护进程的系统资源设置 docker search Docker 仓库的查询 docker pull Docker 仓库的下载 docker images Docker 镜像的查询 docker rmi Docker 镜像的删除 docker ps 容器的查询 docker run 容器的创建启动 docker start/stop 容器启动/停止 docker rm 容器的删除 docker save -o mysql5.7.tar mysql:5.7 将本地镜像导出 docker load -i mysql5.7.tar 导入 #查看完整id号:docker images --no-trunc # Docker 指令除了单条使用外,还支持赋值、解析变量、嵌套使用 镜像保存在: /var/lib/docker/overlay ##单一容器管理 docker ps -a --no-trunc #查看 docker stop/start CONTAINERID #停止 docker start/stop MywordPress #通过容器别名启动/停止 docker inspect MywordPress #查看容器所有基本信息 docker logs MywordPress #查看容器日志 docker stats MywordPress #查看容器所占用的系统资源 docker exec 容器名 容器内执行的命令 #容器执行命令 docker exec -it 容器名 /bin/bash #登入容器的bash ##run基础命令 --restart=always 容器的自动启动 -h x.xx.xx 设置容器主机名 --dns xx.xx.xx.xx 设置容器使用的 DNS 服务器 --dns-search DNS 搜索设置 --add-host hostname:IP 注入 hostname <> IP 解析 --rm 服务停止时自动删除 
 docker info 守护进程的系统资源设置 docker search Docker 仓库的查询 docker pull Docker 仓库的下载 docker images Docker 镜像的查询 docker rmi Docker 镜像的删除 docker ps 容器的查询 docker run 容器的创建启动 docker start/stop 容器启动/停止 docker rm 容器的删除 删除镜像: [root@localhost ~]# docker rmi -f hello-world:latest ​ #查看完整id号:docker images --no-trunc # Docker 指令除了单条使用外,还支持赋值、解析变量、嵌套使用 ​ 镜像保存在: /var/lib/docker/overlay
docker info守护进程的系统资源设置 docker searchDocker 仓库的查询 [root@localhost ~]# docker search nginx docker pullDocker 仓库的下载 docker imagesDocker 镜像的查询 #查看完整id号:docker images --no-trunc docker rmiDocker镜像的删除 docker ps容器的查询 docker run容器的创建启动 docker start/stop 容器启动/停止

一个容器运行的最低要求:必须拥有一个前台进程,Docker认为如果一个容器没有前台进程就是在摸鱼,会被立即杀死。

如果不加-d则会运行在前台

换言之也就是说只有放在后台后才能正常运行

然而——

命令:docker pull centos:centos7.9.2009

则自动退出

加-d仍然没有运行

因其运行的指令/bin/bash并不在前台

而wordpress所运行的指令是在前台的,即打开了一个tty终端,tty在前台;但/bin/bash不在前台

查看完整id号:–no-trunc

1、镜像名+版本号:centos:centos7.9.2009

2、镜像ID:镜像ID 在使用的时候可以省略,只写前四位

1、容器的ID号,可以省略,写前四位

2、容器的别名

docker rm 容器ID号/别名

若正在运行的则无法直接删除,需加-f

docker ps -a -q 只输出当前所有容器的ID号

docker rm -f $( docker ps -a -q ) 批量删除所有容器

同理若批量删除镜像则是: docker rmi -f $( docker images -q )

批量启动容器则是:docker start $( docker ps -a -q)

##后续可使用该脚本方便批量删除不用的容器

[root@localhost ~] vim /usr/local/bin/cc

 #!/bin/bash /usr/bin/docker rm-f$( /usr/bin/docker ps -a -q ) /usr/bin/docker ps-a

[root@localhost ~] chmod+x /usr/local/bin/cc

每个容器被创建后,都会分配一个 CONTAINER ID 作为容器的唯一标示,后续对容器的启动、停止、修改、删除等所有操作,都是通过 CONTAINER ID 来完成,偏向于数据库概念中的主键

 docker ps -a --no-trunc #查看 docker stop/start CONTAINERID #停止 docker start/stop MywordPress #通过容器别名启动/停止 docker inspect MywordPress #查看容器所有基本信息 docker logs MywordPress #查看容器日志 docker stats MywordPress #查看容器所占用的系统资源 docker exec 容器名 容器内执行的命令 #容器执行命令 docker exec -it 容器名 /bin/bash #登入容器的bash

查看其所有信息:docker inspect test-1

[root@me ~]# docker inspect test-1 [ { "Id": "c8f81a24d9864604124da1106b82514448c8eaaf394e594f45afc7ec97af1551", "Created": "2023-02-14T02:20:42.813392475Z", "Path": "/usr/bin/supervisord", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, ...... ...... "EndpointID": "0ecef6157475c38940d29b08d5f9d13cf752d308aaa71497a9e1049d22de2654", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02" } } } } ] 

所看到的信息为JSON格式所写

常用格式为ini格式

 [mysqld] port=3306 server=127.0.0.1 [redis] port=5601 server=127.0.0.1

JSON格式则为

 { "mysqld":{ "port": "3306", "server": "127.0.0.1" }, "redis":{ "port": "5601", "server": "127.0.0.1" } }

安装软件jq

[root@localhost ~]# yum -y install epel-release

[root@localhost ~]# yum -y install jq

美化过的JSON格式

docker logs 等同于将后台的输出信息打印出来 # 查看指定时间后的日志,只显示最后100行 docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID ​ # 查看最近30分钟的日志 docker logs --since 30m CONTAINER_ID ​ # 查看某时间之后的日志 docker logs -t --since="2021-08-18T11:46:37" CONTAINER_ID ​ # 查看某时间之后最新的100条日志 docker logs -t --since="2021-08-18T11:46:37" --tail=100 CONTAINER_ID ​ # 查看某时间段的日志 docker logs -t --since="2021-08-18T11:46:37" --until "2021-08-18T11:47:37" CONTAINER_ID

docker stats test-1

容器名 CPU使用率 内存的使用量/可用内存的总大小 内存使用百分百 网络入站/出站数据包 磁盘设备的写入/读取 进程ID

会持续刷新

# docker run --name test-3 -d hub.c.163.com/public/centos:7.2-tools # docker run --name test-4 -d hub.c.163.com/public/centos:7.2-tools docker stats 不加容器名则会列出所有容器

并无法访问,因此容器内部并没有80端口

docker exec 容器名 容器内执行的命令

docker exec centos touch /root/mayunfei

在centos容器创建一个mayunfei的文件,↓

但此命令执行起来会比较麻烦,故可——

直接进入容器里——docker exec -it centos /bin/bash

当前默认主机名为当前容器的ID号缩写

此时即可直接在内部安装Apache,而使内部有80端口,而使之可访问8080

只要外部有网络,容器内部就有

容器系统问题:

centos7:systemd 会使用D-BUS进行进程之间的通讯,D-BUS必须工作在完整的ROOT权限中,D-BUS目前只会影响systemctl start/stop/restart….等子命令。

Centos7可正常使用,因为其使用init

故在容器无法使用systemctl restart httpd 启动Apache,容器中的root只是伪root而非真root,直接使用 httpd 启动即可

在容器外部仍能访问到,因docker已自动配置了网桥

但是在外部则无法直接通过172.17.0.2:80在浏览器访问成功

前边已加过参数使8080端口映射为80端口,故需访问8080端口:宿主机ip:8080

 $ yum -y install lrzsz gcc gcc-c++ zlib zlib-devel pcre pcre-devel openssl-devel make $ tar -zxf nginx... $ cd nginx.. $ ./configure--prefix=/usr/lcoal/nginx $ make && make install $ pkill httpd $ /usr /local/nginx/sbin/nginx
 --restart=always 容器的自动启动 -h x.xx.xx 设置容器主机名 --dns xx.xx.xx.xx 设置容器使用的 DNS 服务器 --dns-search DNS 搜索设置 --add-host hostname:IP 注入 hostname <> IP 解析 --rm 服务停止时自动删除 

docker tag #给镜像重启做别名

二者为同一文件,只不过不同名字而已

[root@localhost ~]# docker run –name test_1 -p 8080:80 –restart=always -d 163[root@localhost ~]# docker run –name test_2 -p 8081:80 -d 163

模拟重启系统,即重启docker——可知test1让在运行,而test2已关闭,即test1会随着docker的启动而启动,即自启动:物理机来电自启>centos>Docker>test_1

systemctl restart docker

-h x.xx.xx

[root@localhost ~]# docker run –name test2 –rm -d 163

Docker-Compose

Docker-Compose容器编排工具,允许用户在一个模板( YAML 格式 )中定义一组相关联的容器,会根据 –link 等参数,对启动的优先级进行排序。
Docker 提倡理念是 “**一个容器一个进程**”,假设一个服务需要由多个进程组成,就需要多个容器组成一个系统,相互分工和配合对外提供完整服务
比如:博客系统
组件1:mariadb
组件2:WordPress 的 apache web


在启动容器时,同一台主机下如果两个容器之间需要由数据交流,使用 –link 选项建立两个容器之间的互联,前提是建立时 mariadb 已经开启
docker start db
docker start MywordPress
停止:
docker stop db MywordPress 或 docker stop MywordPress 在 docker top db

Linux 数据流三剑客:awk ;sed ;grep
Docker 三剑客:docker-Compose;docker-machine;docker-swarm(基本淘汰)
docker-compose:在单物理机中,安装多容器组建的集群
docker-machine:利用docker 技术伪真虚拟机
docker-swarm:将多个物理机组建成容器化集群

Docker-Compose下载

curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose docker version

该命令在测试一些项目时非常好用,测试完毕退出后会自动删除镜像

[root@localhost ~]# docker run -it –rm 163 /bin/bash

vim docker-compose.yml

#指定 docker-compose.yml 文件的版本 version: '3.3' # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称 services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql # 定义容器重启策略 restart: always # 设置环境变量, environment 的值可以覆盖 env_file 的值 environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: #docker-compose up 以依赖顺序启动服务,先启动db depends_on: - db image: wordpress:latest # 建立宿主机和容器之间的端口映射关系,容器的 80 端口和宿主机的 8000 端口建立映射关>系 ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress # 定义容器和宿主机的卷映射关系, 其和 networks 一样可以位于 services 键的二级key和 compose 顶级key, 如果需要跨服务间使用则在顶级key定义, 在 services 中引用 volumes: db_data: {}

在docker-compose.yml的同一个目录下执行命令/usr/local/bin/docker-compose up -d 完成服务启动。

访问http://<linux宿主机服务器>:8000 。

同样使用mysql客户端,可以访问该宿主机的3306端口,查看数据库数据。

原文链接:https://blog.csdn.net/Selinu/article/details/129021390?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168666919616800180631443%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168666919616800180631443&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-21-129021390-null-null.268%5Ev1%5Ekoosearch&utm_term=docker%E3%80%81wordpress%E3%80%81wordpress%E5%BB%BA%E7%AB%99%E3%80%81wordpress%E4%B8%BB%E9%A2%98%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享