使用 docker 来创建容器,隔离各个应用的操作环境,可以更加安全和简单地维护不同的应用。而使用 docker compose 来创建和启动容器,便于维护和调试各个容器的启动信息,提高修改效率。
安装 docker
服务器上可能有旧版本的docker,先移除:
sudo apt-get remove docker docker-engine docker.io containerd runc
安装必要支持:
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common lsb-release
添加阿里云的 GPG Key:
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
更新 apt 源:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get update
安装指令:
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
admin 用户是非 root 用户,默认情况下不能使用大部分 docker 指令(需要 sudo
),使用以下指令更新用户权限:
sudo usermod -aG docker $USER
重新登录后,使用 docker 时就不需要 sudo
了。
简单指令:
systemctl start docker
:启动 docker
systemctl status docker
:查看状态
docker versino
:查看 docker 版本
docker images
:查看安装的镜像
安装 docker compose
运行以下命令:
sudo apt-get install docker-compose-plugin
查看是否安装:docker compose version
一般显示如下:
安装镜像和编写 compose.yaml
安装我们需要的镜像:
docker pull xhofe/alist
docker pull mysql
docker pull wordpress
这里手动安装镜像,就不用写 DockerCompose 所需的 Dockerfile 了。想详细学习 DockerCompose 的朋友戳 这里。
然后新建一个文件夹 dockercompose
,在里面写一个文件 docker-compose.yml
。
具体内容可以让 AI 帮忙写,结合各应用的官方文档修改。
大概长这样:
version: '3'
services:
mysql:
image: mysql:latest
container_name: mysql
volumes:
- $HOME/data/mysql:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro # sync with localhost time
ports:
- '3306:3306'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: xxxxxxxx # change it as you like
MYSQL_DATABASE: wordpress #A
MYSQL_USER: wp #B
MYSQL_PASSWORD: wp.login #C
alist:
image: 'xhofe/alist:latest'
container_name: alist
volumes:
- /etc/alist:/opt/alist/data
ports:
- '5244:5244'
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- UMASK=022
- TZ=Asia/Shanghai
wordpress:
depends_on:
- mysql
image: wordpress:latest
container_name: wp
volumes:
- $HOME/data/wordpress:/var/www/html
ports:
- '6773:80'
restart: unless-stopped
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: wp #B
WORDPRESS_DB_PASSWORD: wp.login #C
WORDPRESS_DB_NAME: wordpress #A
这里主要的几个参数解释一下:
image
:使用的镜像名称,可以使用docker images
查看可用镜像的名称和标签container_name
:创建的容器名称,注意不要和其他容器的名称重复了volumes
:挂载选项。在 docker 容器中,所有的内容和外界都是隔离的,一些需要修改的配置文件、需要保留的数据不能很方便地管理;同时删除容器后容器内所有的数据都会丢失。为了持久化这些数据,我们就将主机中某个文件夹挂载到容器中一个文件夹里。例如$HOME/data/mysql:/var/lib/mysql
,就是指将主机中的~/data/mysql
挂载到容器内的/var/lib/mysql
文件夹,容器访问后者时实际上在访问前者。ports
:容器想要和主机交流,就需要开放端口。初始状态下,容器内所有的端口都是封闭的,不能与主机交流。而我们需要规定端口映射,才能让各个容器和主机之间通信。例如,wp 的启动配置中6773:80
一条,就把主机的 6773 端口映射到 wp 容器的 80 端口,这样就可以通信了。environment
:这里的环境配置和应用本身有关,只要注意以下几条就好。- mysql 映射的主机端口和
WORDPRESS_DB_HOST
写的一致; MYSQL_DATABASE
和WORDPRESS_DB_NAME
、MYSQL_USER
和WORDPRESS_DB_USER
、MYSQL_PASSWORD
和WORDPRESS_DB_PASSWORD
分别对应,填写的内容要一致。
- mysql 映射的主机端口和
启动 docker compose
上一步完成之后,我们在 dockercompose
文件夹里。执行以下命令即可按 docker-compose.yml
创建和启动容器:
docker compose -f docker-compose.yml up -d
-f
指定了配置文件,-d
指定了容器后台运行。
如果想中止容器运行,进行调试的话,应该用 docker compose stop
。
关于 docker compose 中几个不同启动/终止命令的区别:Docker Compose Up 与 Start 以及 Down 与 Stop 区别-(linux-console.net)
这个时候我们实际上已经启动了 Alist、Mysql 和 WordPress,再设置一下代理就可以使用了。