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,下次再讲吧,希望给你有一点点帮助~