docker部署

1、安装docker


作者是基于Linux系统实践的,一般各种包管理工具里面已经集成了docker的安装包,比如作者的yum工具里就有docker-engine.x86_64安装包,因此安装比较方便。

# 查看yum源里有没有docker相关安装包
yum list | grep docker

# 开始安装
yum install -y docker-engine.x86_64

# 安装结束查看docker版本
docker -v
docker version

# docker安装完成后是默认启动的,也可以自行启动
systemctl start docker
systemctl restart docker

# 查看是否有docker进程
ps -eaf | grep docker

# 停止docker
systemctl stop docker

# 查看docker系统信息
docker info

2、配置docker


为了docker能够正常使用,需要配置一下docker.service和daemon.json两个文件。

# 配置docker.service,作者主要需要配置代理,其他倒没啥
vim /usr/lib/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment="HTTP_PROXY="  #如果你的环境需要代理
Environment="HTTPS_PROXY=" #添加这两行配置你的代理即可

ExecStart=/usr/bin/dockerd $OPTIONS \
                           $DOCKER_STORAGE_OPTIONS \
                           $DOCKER_NETWORK_OPTIONS \
                           $INSECURE_REGISTRY
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process

[Install]
WantedBy=multi-user.target

# 配置daemon.json文件,主要配置镜像源和镜像加速
vim /etc/docker/daemon.json #没有这个文件自己创一个

# 在文件中添加下面的内容,这就配置了华为云的镜像加速
{
         "registry-mirrors":["https://xxx.mirror.swr.myhuaweicloud.com"]
}

# 配置完成后输入以下命令使配置生效
systemctl daemon-reload
systemctl restart docker

2.1 获取华为云镜像加速地址


华为云网址

右上角登录控制台
登录控制台
登录上去后点击左上角展开服务列表
展开服务列表
选择容器–>选择容器镜像服务
选择容器镜像服务
进入之后选择右侧的镜像资源里面的镜像中心
选择镜像中心
再点击右上角的镜像加速器
选择镜像加速器
之后跟着弹出来的详细步骤配置即可。

现在应该就能正常使用docker search和docker pull来查询和拉取镜像了,比如:

# 查询镜像仓库里有没有mysql
docker search mysql

# 出现如下信息就是有
NAME                            DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   14934               [OK]                
mariadb                         MariaDB Server is a high performing open sou…   5701                [OK]                
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   958                 [OK]                
percona                         Percona Server is a fork of the MySQL relati…   626                 [OK]                
bitnami/mysql                   Bitnami MySQL Docker Image                      110                                     [OK]
databack/mysql-backup           Back up mysql databases to... anywhere!         110                                     
ubuntu/mysql                    MySQL open source fast, stable, multi-thread…   61                                      
linuxserver/mysql-workbench                                                     55                                      
linuxserver/mysql               A Mysql container, brought to you by LinuxSe…   41                                      
rapidfort/mysql                 RapidFort optimized, hardened image for MySQL   25                                      
google/mysql                    MySQL server for Google Compute Engine          25                                      [OK]
rapidfort/mysql-official        RapidFort optimized, hardened image for MySQ…   9                                       
rapidfort/mysql8-ib             RapidFort optimized, hardened image for MySQ…   9                                       
bitnami/mysqld-exporter                                                         6                                       
cimg/mysql                                                                      3                                       
drupalci/mysql-5.5              https://www.drupal.org/project/drupalci         3                                       [OK]
vitess/mysqlctld                vitess/mysqlctld                                1                                       [OK]
eclipse/mysql                   Mysql 5.7, curl, rsync                          1                                       [OK]
elestio/mysql                   Mysql, verified and packaged by Elestio         0                                       
mirantis/mysql                                                                  0                                       
docksal/mysql                   MySQL service images for Docksal - https://d…   0                                       
bitnamicharts/mysql                                                             0                                       
drupalci/mysql-5.7              https://www.drupal.org/project/drupalci         0                                       
drupalci/mysql-8                https://www.drupal.org/project/drupalci         0                                       
hashicorp/mysql-portworx-demo                                                   0                                       

# 拉取想要的镜像到本地
docker pull mysql

latest: Pulling from library/mysql
45b42c59be33: Pull complete 
b4f790bd91da: Pull complete 
325ae51788e9: Pull complete 
adcb9439d751: Pull complete 
174c7fe16c78: Pull complete 
698058ef136c: Pull complete 
4690143a669e: Pull complete 
f7599a246fd6: Pull complete 
35a55bf0c196: Pull complete 
790ac54f4c47: Pull complete 
b0ddd5d1b543: Pull complete 
1aefd67cb33d: Pull complete 
Digest: sha256:03306a1f248727ec979f61424c5fb5150e2c5fd2436f2561c5259b1258d6063c
Status: Downloaded newer image for mysql:latest

# 下载完成,docker images查询镜像
docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
testos              20240227V0          a9179cfc48eb        2 weeks ago         16.6GB
mysql               latest              8457e9155715        3 years ago         546MB

3、部署docker


通常我们是基于一个基础镜像来创建一个容器,然后把我们想要运行的服务进程和工具包放到容器里去运行。但是有时候我们的服务可能基础镜像满足不了,这时候我们可以直接把宿主机的环境打包成一个镜像来供docker容器使用。

# 先把宿主机的环境打包
tar -zcvpf dockerimages.tar --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .
# --exclude 表示排除宿主机上这些目录,因为每次启动它们都会发生变化,打包无意义

# 把压缩包导入docker镜像
docker import dockerimages.tar 你的镜像名称

# 启动一个容器看看
docker run -itd -p 80:80 --name 容器名称 镜像名称 /bin/bash
# 这里解释一下-itd表示以后台交互模式启动容器
# -p 80:80表示把宿主机的80端口映射到容器的80端口
# 这里使用docker的默认网络模式,也就是桥接模式
# 在宿主机上ip a查询应该会发现多一个docker0的网卡
# 也可以直接使用宿主机的网络
docker run -itd --net host --name 容器名称 镜像名称 /bin/bash

# 查询一下容器的运行状态
docker ps #查询正在运行的容器
docker ps -a #查询所有的容器

# 进入容器
docker exec -it 容器ID /bin/bash

4、踩坑


细心的朋友们已经发现我们在执行docker run的时候后面都会跟着一个/bin/bash,这是表示容器启动后运行的第一个进程,如果容器启动后没有进程运行那么马上就会退出,因此通常会启动bash作为容器启动项。但是这会带来一个问题就是如果你的服务是靠systemd进程拉起的,那么在容器里运行服务则会报错,因为容器里没有systemd进程。网上流传的解决方法是给容器赋予特权,如下:

docker run -itd --net host --cap-add SYS_ADMIN --priviledged --name 容器名称 镜像名称 /sbin/init

# 这个命令的作用是让docker容器里的服务就像运行在宿主机上一样
# 但是也会带来容器逃离的风险,比如你在容器修改的配置,可能会将宿主机上的配置一并修改

5、卸载docker


# 停止容器
docker stop 容器ID

# 删除容器
docker rm 容器ID

# 删除镜像
docker rmi 镜像ID

# 卸载docker
yum remove docker

# 删除docker配置文件
find / -name "*docker*"
rm -rf /etc/docker
rm -rf /var/lib/docker

# 删除docker0网卡
ip link delete docker0


其实docker还有很多东西没讲完,比如dockerfile,下次再讲吧,希望给你有一点点帮助~

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值