Docker是一个开源的应用容器引擎,提供了容器的自动化打包、分发和运行的工具和服务,具有隔离性好、可移植性强、易于管理等优势。本文主要介绍如何在Linux轻量应用服务器中手工部署Docker,并提供了Docker常用操作、使用Docker制作镜像的流程及其安装并使用docker-compose部署WordPress。
您也可以通过应用镜像快速部署Docker:
如果您尚未创建轻量应用服务器,建议您通过应用镜像快速部署Docker。具体操作,请参见快速部署Docker(使用应用镜像)。
如果已创建轻量应用服务器,您也可以通过重置系统时选择Docker应用镜像部署Docker,但重置系统会清除轻量应用服务器上的磁盘数据,请您根据需要做好数据备份。具体操作,请参见重置系统。
关于Docker的更多信息,请参见Docker概述。
准备工作
已创建Linux轻量应用服务器,并满足以下配置。具体操作,请参见创建轻量应用服务器。
操作系统:Alibaba Cloud Linux 3 64位、Alibaba Cloud Linux 2 64位、CentOS 7.x 64位、CentOS 8.x 64位、Ubuntu 22/20、Debain 11/12
防火墙:入方向放行80和22端口。具体操作,请参见防火墙设置。
部署Docker
远程连接轻量应用服务器。具体操作,请参见远程连接Linux服务器。
安装Docker。
Alibaba Cloud Linux 3
运行以下命令,添加docker-ce的dnf源。
sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
运行以下命令,安装Alibaba Cloud Linux 3专用的dnf源兼容插件。
sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
运行以下命令,安装Docker。
sudo dnf -y install docker-ce --nobest
如果执行命令时,出现类似如下的报错信息,您需要执行
sudo dnf clean packages
清除软件包缓存后,重新安装docker-ce。(8-9/12): docker-ce-24.0.7-1.el8.x86_64.rpm 38% [================- ] 8.2 MB/s | 38 MB 00:07 ETA The downloaded packages were saved in cache until the next successful transaction. You can remove cached packages by executing 'dnf clean packages'. Error: Error downloading packages: containerd.io-1.6.26-3.1.el8.x86_64: Cannot download, all mirrors were already tried without success
如果执行命令时,出现类似下图的报错信息,您需要注释/etc/yum.repos.d下的CentOS源,注释后重新安装docker-ce。
Alibaba Cloud Linux 2
运行以下命令,下载docker-ce的yum源。
sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
运行以下命令,安装Alibaba Cloud Linux 2专用的yum源兼容插件。
sudo yum install yum-plugin-releasever-adapter --disablerepo=* --enablerepo=plus
运行以下命令,安装Docker。
sudo yum -y install docker-ce
CentOS 7.x
运行以下命令,下载docker-ce的yum源。
sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
运行以下命令,安装Docker。
sudo yum -y install docker-ce
CentOS 8.x
切换CentOS 8源地址。
CentOS 8操作系统版本结束了生命周期(EOL),按照社区规则,CentOS 8的源地址http://mirror.centos.org/centos/8/内容已移除,您在阿里云上继续使用默认配置的CentOS 8的源会发生报错。如果您需要使用CentOS 8系统中的一些安装包,则需要手动切换源地址。具体操作,请参见CentOS 8 EOL如何切换源?。
运行以下命令,安装DNF。
sudo yum -y install dnf
运行以下命令,安装Docker存储驱动的依赖包。
sudo dnf install -y device-mapper-persistent-data lvm2
运行以下命令,添加稳定的Docker软件源。S
sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
运行以下命令,检查Docker软件源是否已添加。
sudo dnf list docker-ce
出现如下图所示回显,表示Docker软件源已添加。
运行以下命令安装Docker。
sudo dnf install -y docker-ce --nobest
Ubuntu(18/22/20)/Debian(11/12)
更新软件包列表。
sudo apt update
安装Docker所需依赖包。
sudo apt-get -y install ca-certificates curl
创建
/etc/apt/keyrings
目录,并下载Docker的官方GPG密钥到该目录。Ubuntu 18/22/20
sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
Debian 11/12
sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
将Docker仓库添加到系统的软件源列表。
Ubuntu 18/22/20
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Debian 11/12
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新软件包列表。
sudo apt update
安装Docker。
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
查看docker版本信息。
docker -v
如下图回显信息所示,表示Docker已安装成功。
启动Docker守护进程并设置开机自启动。
执行以下命令,启动Docker服务,并设置开机自启动。
sudo systemctl start docker sudo systemctl enable docker
执行以下命令,查看Docker是否启动。
sudo systemctl status docker
如下图回显所示,表示Docker已启动。
Docker基本操作
下文只列出Docker基本用法,更详细的操作命令,请参见Docker官网。
Docker进程管理
启动Docker守护进程
sudo systemctl start docker
查看Docker的运行状态
sudo systemctl status docker
停止Docker守护进程
sudo systemctl stop docker
重启Docker守护进程
sudo systemctl restart docker
设置Docker开机自启动
sudo systemctl enable docker
管理镜像
本文以阿里云仓库的Apache镜像为例,介绍如何使用Docker管理镜像。
拉取镜像。
sudo docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
修改标签。如果镜像名称较长,您可以修改镜像标签以便记忆区分。
sudo docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest aliweb:v1
查看已有镜像。
sudo docker images
强制删除镜像。
sudo docker rmi -f registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
管理容器
下文的<镜像ID>可通过
docker images
命令查询。如果您要在容器内部运行相关命令,您可以通过在容器中运行
cat /etc/os-release
提前确认您的容器操作系统类型及版本,以便使用合适的命令来完成您的操作。
启动一个容器。
您可以通过守护模式或者交互模式启动一个容器。
说明使用守护模式启动的容器,退出容器后容器会保持运行状态。
使用交互模式启动的容器,退出容器后容器状态会变成
Exited
,您可以使用sudo docker start <容器ID>
命令使容器恢复运行状态。
使用守护模式启动容器
sudo docker run -d --name <容器名> <镜像ID>
使用交互模式启动容器
# 使用交互模式启动一个新容器。 sudo docker run -it <镜像ID> /bin/bash
查看容器ID。
sudo docker ps -a
启动停止状态的容器。
sudo docker start <容器ID>
在一个运行中的容器中执行命令。
sudo docker exec -it <容器ID> /bin/bash
说明如果要退出容器,可以执行
exit
命令。
使用Docker制作镜像
本步骤指导如何通过Dockerfile定制制作一个简单的Nginx镜像。
执行以下命令,拉取镜像。本示例以拉取阿里云仓库的Apache镜像为例。
sudo docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
修改镜像名称标签,便于记忆。
sudo docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest aliweb:v1
执行以下命令,新建并编辑Dockerfile文件。
执行以下命令,新建并编辑Dockerfile文件。
vim Dockerfile
按
i
进入编辑模式,并添加以下内容,改造原镜像。#声明基础镜像来源。 FROM aliweb:v1 #声明镜像拥有者。 MAINTAINER DTSTACK #RUN后面接容器运行前需要执行的命令,由于Dockerfile文件不能超过127行,因此当命令较多时建议写到脚本中执行。 RUN mkdir /dtstact #开机启动命令,此处最后一个命令需要是可在前台持续执行的命令,否则容器后台运行时会因为命令执行完而退出。 ENTRYPOINT ping www.aliyun.com
按
Esc
键,输入:wq
并按Enter
键,保存并退出Dockerfile文件。
执行以下命令,基于基础镜像nginx构建新镜像。
命令格式为
docker build -t <镜像名称>:<镜像版本> .
,命令末尾的.
表示Dockerfile文件的路径,不能忽略。以构建新镜像aliweb:v2为例,则命令为:sudo docker build -t aliweb:v2 .
执行以下命令,查看新镜像是否构建成功。
sudo docker images
如下图回显所示,表示构建成功。
安装并使用docker-compose
docker-compose是Docker官方提供的用于定义和运行多个Docker容器的开源容器编排工具,可以使用YAML文件来配置应用程序需要的所有服务,然后使用docker-compose运行命令解析YAML文件配置,创建并启动配置文件中的所有Docker服务,具有运维成本低、部署效率高等优势。
关于docker-compose的更多信息,请参见Docker官网。
仅Python 3及以上版本支持docker-compose,并请确保已安装pip。
安装docker-compose
运行以下命令,安装setuptools。
sudo pip3 install -U pip setuptools
运行以下命令,安装docker-compose。
sudo pip3 install docker-compose
运行以下命令,验证docker-compose是否安装成功。
docker-compose --version
如果回显返回docker-compose版本信息,表示docker-compose已安装成功。
使用docker-compose部署应用
下文以部署WordPress为例,介绍如何使用docker-compose部署应用。
创建并编辑docker-compose.yaml文件。
运行以下命令,创建docker-compose.yaml文件。
sudo vim docker-compose.yaml
按下
i
键,进入编辑模式,新增以下内容。本示例以安装WordPress为例。
version: '3.1' # 版本信息 services: wordpress: # 服务名称 image: wordpress # 镜像名称 restart: always # docker启动,当前容器必启动 ports: - 80:80 # 映射端口 environment: # 编写环境 WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: 123456 WORDPRESS_DB_NAME: wordpress volumes: # 映射数据卷 - wordpress:/var/www/html db: # 服务名称 image: mysql:5.7 # 镜像名称 restart: always # docker启动,当前容器必启动 ports: - 3306:3306 # 映射端口 environment: # 环境变量 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: 123456 MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: # 卷挂载路径 - db:/var/lib/mysql volumes: wordpress: db:
按下
Esc
键,退出编辑模式,然后输入:wq
保存并退出。
执行以下命令,启动应用。
sudo env "PATH=$PATH" docker-compose up -d
在浏览器中输入
https://轻量应用服务实例的公网IP
,即可进入WordPress配置页面,您可以根据界面提示配置相关参数后,访问WordPress。
常见问题
在Linux实例或容器中执行systemctl
相关命令报错
问题现象:在Linux系统实例或容器中执行
systemctl
命令出现类似如下报错:System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to get D-Bus connection: xxx xxx.
可能原因:没有使用
systemd
作为其初始化系统(init system
)。解决方案:您可以尝试使用
service
命令来进行服务管理。例如,将sudo systemctl restart sshd.service
,替换为sudo service sshd restar
。
相关文档
Docker的更多使用方法,请参见Docker官方文档。
使用Docker镜像。
阿里云容器镜像服务ACR推出了制品中心,为容器开发者免费提供了来源于阿里云官方、龙蜥社区的安全可信容器基础镜像。部署Docker后,您可以直接使用制品中心的Docker容器镜像来实现特定业务需求,例如部署应用、开发环境、操作系统、AI/大数据学习框架等。
Docker镜像加速。
您可以使用P2P加速功能提升镜像拉取速度,减少应用部署时间。具体操作,请参见在其他容器环境中使用P2P加速。
您可以在Docker中配置CLI来管理您的阿里云资源。具体操作,请参见在Docker中配置阿里云CLI。
您还可以选择使用阿里云容器镜像服务ACR,管理和运行容器化应用程序。