本文介绍如何在Alibaba Cloud Linux 3.2104 64位操作系统的ECS实例上部署并使用Docker,适用于熟悉Linux操作系统、刚开始使用阿里云ECS的开发者。
前提条件
已创建Alibaba Cloud Linux 3.2104 64位操作系统的ECS实例。具体操作,请参见自定义购买实例。
本教程示例步骤适用于以下ECS实例配置:
实例规格:ecs.g6.large
操作系统:公共镜像Alibaba Cloud Linux 3.2104 64位
网络类型:专有网络VPC
IP地址:公网IP
背景信息
本教程主要介绍以下内容:
部署Docker,具体操作,请参见部署Docker。
使用Docker。
Docker的基本用法介绍,请参见使用Docker。
制作镜像的示例操作,请参见制作Docker镜像。
部署Docker
- 远程连接ECS实例。关于连接方式的介绍,请参见连接方式概述ECS远程连接操作指南。
运行以下命令,安装dnf。
dnf是新一代的rpm软件包管理器。
sudo yum -y install dnf
安装Docker。
您可以通过以下任一方式安装Docker:
安装dnf源中默认的Docker(podman-docker)
运行以下命令,安装podman-docker。
sudo dnf -y install docker
运行以下命令,查看Docker是否安装成功。
docker images
回显信息如下图所示,表示Docker安装成功。
重要该方式安装的podman-docker没有守护进程(systemd),因此您在后续的操作中无需关注podman-docker的运行状态(无需进行systemctl命令的相关操作),直接使用Docker即可。
安装社区版Docker(docker-ce)
运行以下命令,添加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-ce。
sudo dnf -y install docker-ce --nobest
如果执行命令,出现类似下图的报错信息,您需要注释/etc/yum.repos.d下的CentOS源,注释后重新安装docker-ce。
运行以下命令,查看docker-ce是否成功安装。
dnf list docker-ce
回显信息如下图所示,表示docker-ce成功安装。
运行以下命令,启动Docker服务。
sudo systemctl start docker
运行以下命令,查看Docker服务的运行状态。
systemctl status docker
回显信息如下图所示,表示Docker服务处于运行中的状态。
说明如果您需要查看Docker的版本,请运行
docker -v
命令。
使用Docker
- 管理Docker守护进程。
systemctl start docker #运行Docker守护进程 systemctl stop docker #停止Docker守护进程 systemctl restart docker #重启Docker守护进程 systemctl enable docker #设置Docker开机自启动 systemctl status docker #查看Docker的运行状态
说明 通过yum源的方式安装的Docker(podman-docker)没有守护进程(systemd),因此不支持systemctl命令的相关操作。 - 管理镜像。本文使用的是来自阿里云仓库的Apache镜像。
docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
- 修改标签。由于阿里云仓库镜像的镜像名称较长,您可以修改镜像标签以便记忆区分。
docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest aliweb:v1
- 查看已有镜像。
docker images
- 强制删除镜像。
docker rmi -f registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
- 修改标签。由于阿里云仓库镜像的镜像名称较长,您可以修改镜像标签以便记忆区分。
- 管理容器。
- 进入容器。e1abc****是执行
docker images
命令查询到的ImageId,使用docker run
命令进入容器。docker run -it e1abc**** /bin/bash
- 退出容器。使用
exit
命令退出当前容器。 run
命令加上–d
参数可以在后台运行容器,--name
指定容器命名为apache。docker run -d --name apache e1abc****
- 进入后台运行的容器。
docker exec -it apache /bin/bash
- 查看容器ID。
docker ps
- 将容器做成镜像,命令的参数说明:
docker commit <容器ID或容器名> [<仓库名>[:<标签>]]
。docker commit containerID/containerName repository:tag
- 为了方便测试和恢复,将源镜像运行起来后,再做一个命名简单的镜像做测试。
docker commit 4c8066cd8**** apachephp:v1
- 运行容器并将宿主机的8080端口映射到容器里去。
docker run -d -p 8080:80 apachephp:v1
在浏览器输入ECS实例IP地址加8080端口访问测试,出现以下内容则说明运行成功。说明 ECS实例的安全组入方向规则需要放行8080端口。具体操作,请参见添加安全组规则。
- 进入容器。e1abc****是执行
制作Docker镜像
- 准备Dockerfile内容。
- 新建并编辑Dockerfile文件。
vim Dockerfile
- 按i进入编辑模式,添加以下内容。
#声明基础镜像来源。 FROM apachephp:v1 #声明镜像拥有者。 MAINTAINER DTSTACK #RUN后面接容器运行前需要执行的命令,由于Dockerfile文件不能超过127行,因此当命令较多时建议写到脚本中执行。 RUN mkdir /dtstact #开机启动命令,此处最后一个命令需要是可在前台持续执行的命令,否则容器后台运行时会因为命令执行完而退出。 ENTRYPOINT ping www.aliyun.com
- 按下键盘Esc键,输入
:wq
并按下enter键,保存并退出Dockerfile文件。
- 新建并编辑Dockerfile文件。
创建镜像。
docker build -t webalinux3:v1 . #使用Dockerfile创建镜像。命令末尾的.是Dockerfile文件的路径,不能忽略。 docker images #查看是否创建成功。
运行容器并查看容器信息。
docker run -d webalinux3:v1 #后台运行容器。 docker ps #查看当前运行中的容器。 docker ps -a #查看所有容器,包括未运行的容器。 docker logs CONTAINER ID/IMAGE #如未查看到刚才运行的容器,则用容器id或者名称查看启动日志排错。
- 制作镜像。
docker commit fb2844b6**** dtstackweb:v1 #commit参数后添加容器ID和构建新镜像的名称和版本号。 docker images #列出本地(已下载的和本地创建的)镜像。
- 将镜像推送至远程仓库。默认推送到Docker Hub。您需要先登录Docker,为镜像绑定标签,将镜像命名为
Docker用户名/镜像名:标签
的格式。最终完成推送。docker login --username=dtstack_plus registry.cn-shanghai.aliyuncs.com #执行后输入镜像仓库密码。 docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/dtstack123/test:[标签] docker push registry.cn-shanghai.aliyuncs.com/dtstack123/test:[标签]
Docker编排工具docker-compose
docker-compose是Docker官方提供的用于定义和运行多个Docker容器的开源容器编排工具。可以使用YAML文件来配置应用程序需要的所有服务,然后使用docker-compose运行命令解析YAML文件配置,创建并启动配置文件的所有docker服务。
docker-compose具有运维成本低、部署效率高等优势。更多信息,请参见Docker官网。
步骤一:安装docker-compose
运行以下命令,安装setuptools。
pip3 install -U pip setuptools
运行以下命令,安装Docker-compose。
pip3 install docker-compose
运行以下命令,测试docker-compose是否安装成功。
docker-compose --version
如果回显信息如下,表示docker-compose已安装成功。
[root@iZbp12agc67ou72wn1d**** ~]# docker-compose --version /usr/local/lib/python3.6/site-packages/paramiko/transport.py:32: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography. The next release of cryptography will remove support for Python 3.6. from cryptography.hazmat.backends import default_backend docker-compose version 1.29.2, build unknown
步骤二:编写docker-compose.yaml文件
运行以下命令,编辑docker-compose.yaml文件。
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
保存并退出。
步骤三:启动并访问应用
运行以下命令,启动应用。
docker-compose up -d
在浏览器中输入http://云服务器ECS实例的公网IP,即可进入WordPress配置页面,您可以根据界面提示配置相关参数后,访问WordPress。
docker-compose常用命令
docker-compose up -d #启动容器
docker-compose down #停止并删除容器
docker-compose start #启动容器
docker-compose stop #关闭容器
docker-compose restart #重启容器
docker-compose rm #删除已经关闭的容器
docker-compose up #基于yml创建容器
docker-compose down #停止并删除容器
docker-compose logs #查看容器的日志
docker-compose ps #显示所有容器
dokcer-compose config #检查配置
docker-compose pull #拉取依赖镜像