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的安装。

手动安装

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

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

[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镜像下载

网易镜像仓库:镜像中心 - 网易云镜像中心 (163yun.com)

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则会运行在前台

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

然而——

官方库,下载centos镜像对应版本:https://hub.docker.com/search?q=centos

命令:docker pull centos:centos7.9.2009

则自动退出

加-d仍然没有运行

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

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

容器的查询 docker ps -a

查看完整id号:--no-trunc

镜像标识

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

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

容器标识

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

2、容器的别名

容器的删除

docker rm 容器ID号/别名

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

Docker 指令除了单条使用外,还支持赋值、解析变量、嵌套使用

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 run --name test-1 -d hub.c.163.com/public/centos:7.2-tools

查看其所有信息: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"
     }
 }

命令行里查看JSON格式

安装软件jq

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

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

美化过的JSON格式

docker logs #查看容器日志
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 #查看容器所占用的系统资源

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 不加容器名则会列出所有容器

#容器执行命令
进入容器的命令:docker exec -it centos /bin/bash

# docker run --name centos -p 8080:80 -d hub.c.163.com/public/centos:7.2-tools

并无法访问,因此容器内部并没有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

**在容器内部使用源码包安装nginx
 $ 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

三、run基础命令

     --restart=always         容器的自动启动
     -h x.xx.xx               设置容器主机名
     --dns xx.xx.xx.xx        设置容器使用的 DNS 服务器
     --dns-search             DNS 搜索设置
     --add-host hostname:IP   注入 hostname <> IP 解析
     --rm                     服务停止时自动删除    
1.给镜像别名

docker tag #给镜像重启做别名

[root@localhost ~]# docker tag hub.c.163.com/public/centos:7.2-tools 163:latest

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

2.--restart=always 容器的自动启动

[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

3.设置容器主机名

-h x.xx.xx

[root@localhost ~]# docker run --name test2 -h www.mayunfei.com -d 163

4.--add-host hostname:IP 注入 hostname <> IP 解析

docker run --name test3 --add-host www.mayunfei.com:192.168.46.101 -d 163

5.--rm 服务停止时自动删除

[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

--rm 使用容器对一些项目测试,退出时自动删除容器

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

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

编写wordpress
1、在当前目录下创建一个docker compose配置文件

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: {}
2、执行命令/usr/local/bin/docker-compose up -d

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

3、访问

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

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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值