以下操作均在 root 用户下进行,否则请带上
sudo
,或者是把用户加到 docker 用户组内。
每次需要运行大量命令
docker run \
--name nginx \
-itd \
-p 80:80 \
-p 443:443 \
-v /root/nginx_conf/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /root/nginx_conf/cert_conf:/etc/nginx/cert_conf:ro \
-v /root/nginx_conf/website_conf:/etc/nginx/website_conf:ro \
-v /root/website:/usr/share/nginx/html:ro \
-v /root/acme.sh:/etc/acme.sh:ro \
-v /root/nginx_logs:/var/log/nginx \
--network ding-docker \
--restart=unless-stopped \
nginx
docker run -d \
--restart=unless-stopped \
--name verysync \
-v /root/verysync:/data \
--network ding-docker \
unwenliu/verysync:latest
docker run -dit --name code-server \
-v "$HOME/.config:/root/.config" \
-v "$PWD:/home/coder/project" \
-u "$(id -u):$(id -g)" \
--network ding-docker \
--restart=unless-stopped \
codercom/code-server:latest
docker run \
--name note \
-it -d \
-v ~/wizdata:/wiz/storage \
-e SEARCH=true \
--network ding-docker \
wiznote/wizserver
docker run -d \
--name aria2 \
--restart unless-stopped \
--log-opt max-size=1m \
-e PUID=0 \
-e PGID=0 \
-e RPC_SECRET=****** \
-p 6800:6800 \
-p 6888:6888 -p 6888:6888/udp \
--network ding-docker \
-v /root/cloudreve/aria2/config:/config \
-v /root/cloudreve/aria2/downloads:/downloads \
p3terx/aria2-pro
docker run -d \
--name cloudreve \
-e PUID=0 \
-e PGID=0 \
-e TZ="Asia/Shanghai" \
--network ding-docker \
--restart=unless-stopped \
-v /root/cloudreve/uploads:/cloudreve/uploads \
-v /root/cloudreve/aria2/downloads:/downloads \
-v /root/cloudreve/conf.ini:/cloudreve/conf.ini \
-v /root/cloudreve/cloudreve.db:/cloudreve/cloudreve.db \
-v /root/cloudreve/avater:/cloudreve/avatar \
xavierniu/cloudreve
docker run --name guacd --network ding-docker --restart=unless-stopped -d guacamole/guacd
docker run \
--name mysql \
-v /root/db/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=****** \
--restart unless-stopped \
--network ding-docker \
--privileged=true \
-p 3306:3306 \
-d mysql
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgresql > initdb.sql
docker run \
--name guacamole \
--network ding-docker \
-e MYSQL_HOSTNAME=mysql \
-e MYSQL_DATABASE=****** \
-e MYSQL_USER=****** \
-e MYSQL_PASSWORD=****** \
-e GUACD_HOSTNAME=guacd \
--link guacd:guacd \
--link mysql:mysql \
-d \
-p 8080:8080 \
--restart=unless-stopped \
guacamole/guacamole
docker run -d \
--name rsshub \
-p 1200:1200 \
--restart always \
--network ding-docker \
diygod/rsshub:latest
docker run -d \
--restart unless-stopped \
--log-opt max-size=10m \
-v /root/freshrss_data:/var/www/FreshRSS/data \
-v /root/freshrss_extensions:/var/www/FreshRSS/extensions \
-e 'CRON_MIN=4,34' \
-e TZ=Asia/Shanghai \
--network ding-docker \
--link postgres:postgres \
--name freshrss \
freshrss/freshrss
docker run \
--name typecho \
-v /root/website/typecho:/app/usr \
--link mysql:mysql \
-e TYPECHO_SITE_URL=https://4ading.com \
-e TIMEZONE=Asia/Shanghai \
-e TYPECHO_INSTALL=1 \
-e TYPECHO_DB_ADAPTER=Pdo_Mysql \
-e TYPECHO_DB_HOST=mysql \
-e TYPECHO_DB_USER=****** \
-e TYPECHO_DB_PASSWORD=****** \
-e TYPECHO_DB_DATABASE=****** \
-e ******_NAME=billding \
-e ******_PASSWORD=****** \
-e ******_MAIL=dingjunyao0703@163.com \
--network=ding-docker \
-d joyqi/typecho:nightly-php7.4
docker run -d \
--name=myenigma \
--network=ding-docker \
myenigma-demo
docker run -d \
--name=wikijs \
--network=ding-docker \
--link mysql:mysql \
-e DB_TYPE=mysql \
-e DB_HOST=mysql \
-e DB_PORT=****** \
-e DB_USER=****** \
-e DB_PASS=****** \
-e DB_NAME=****** \
--restart unless-stopped \
requarks/wiki:latest
docker run -p 6379:6379 \
--name redis \
--restart always \
--network=ding-docker \
-v /root/redis/redis.conf:/etc/redis/redis.conf \
-v /root/redis/data:/data \
-d redis \
redis-server \
/etc/redis/redis.conf --appendonly yes --requirepass "******"
docker run -it \
--name postgres \
--network=ding-docker \
--restart always \
-e POSTGRES_PASSWORD='******' \
-e ALLOW_IP_RANGE=0.0.0.0/0 \
-v /root/db/postgres/data:/var/lib/postgresql \
-p 5432:5432 \
-d abcfy2/zhparser
一个可以批量操作 Docker 容器的工具。
使用 YAML 格式的文件保存配置信息。
YAML Ain’t Markup Language
例:
YAML: YAML Ain't Markup Language™
What It Is:
YAML is a human-friendly data serialization
language for all programming languages.
YAML Resources:
YAML Specifications:
- YAML 1.2:
- Revision 1.2.2 # Oct 1, 2021 *New*
- Revision 1.2.1 # Oct 1, 2009
- Revision 1.2.0 # Jul 21, 2009
- YAML 1.1
- YAML 1.0
安装方式不同,之后执行的命令也不同;
这里会考虑公司内网的问题。
以 Ubuntu 为例:
apt install docker-compose
这种安装方式安装的版本较老,安装完后执行的命令为 docker-compose
。
访问 https://github.com/docker/compose/releases/,在最新版或所需版本的 Assets 中找到对应系统、平台的文件,下载:
有两种方法。
创建目录 /usr/local/lib/docker/cli-plugins
:
mkdir -p /usr/local/lib/docker/cli-plugins
将下载的二进制文件放到这个目录下,命名为 docker-compose
。
为其添加 x
权限:
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
这种方式安装完后执行的命令为 docker compose
。
将下载的二进制文件放到 /usr/local/bin/
下,命名为 docker-compose
。
为其添加 x
权限:
chmod +x /usr/local/bin/docker-compose
这种方式安装完后执行的命令为 docker-compose
。
如果 /usr/local/bin
不在 PATH
下,或者是有冲突,可以建立链接:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
根据安装方式执行之前提到的命令,之后加 version
选项:
root@ding-server:~# docker compose version # 下载二进制文件作为插件安装
Docker Compose version v2.6.0
root@ding-server:~# docker-compose version # 通过包管理器安装
docker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10
OpenSSL version: OpenSSL 1.1.1f 31 Mar 2020
此后默认以
docker-compose
为准。
文件名一般为 docker-compose.yml
。
基本格式:
version: "3.9" # 版本号
services: # 开始写需要的容器(服务)
web: # 第一个服务名称
image: mysql:5.7 # 使用的镜像
volumes: # 挂载的空间
- db_data:/var/lib/mysql
restart: always # 重启策略
environment: # 环境变量
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
redis: # 第二个服务名称
image: "redis:alpine" # 镜像
通过配置依赖,可以控制容器的启停顺序,避免容器启动失败。
没有延时启停功能。
例:
version: '3'
services:
mysql-srv:
image: mysql
# ...
nginx-srv:
image: nginx
# ...
typecho:
image: typecho
depends_on:
- nginx-srv
- mysql-srv
Compose specification | Docker Documentation
如果配置文件是当前目录下的 docker-compose.yml
,则不需要自定义。否则,需自定义文件路径,才能使用大多数功能(包括与配置文件无关的功能):
docker-compose [-f 文件路径] 操作 [选项] [服务 ...]
docker
类似的:start
、stop
、restart
、ps
、rm
、pull
、help
、exec
、images
…logs
…up
、down
…up
)首先停止、删除此前存留的服务(只针对文件中的),之后按顺序启动:
docker-compose [-f 文件路径] up [-d] [服务名 ...]
选项:
-d
:后台运行(非常常用);如无该选项则会在前台启动所有服务,终止后即终止所有服务服务名
:只启动特定的服务,但也会启动依赖(如果依赖已启动,默认不会被销毁)down
)停止并删除文件中的服务、网络(包括默认网络)等:
docker-compose [-f 文件路径] down [--remove-orphans]
选项:
--remove-orphans
:撤下不在文件里配置的容器docker-compose [-f 文件路径] logs [选项] [服务名 ...]
查看的是所有服务的日志,而非文件中的。
选项:
服务名
:只查看对应服务的日志-f
:滚动查看-t
:添加时间--tail=数字
:每项服务显示后几条数据日志前面会有服务名,不同服务名以颜色区分:
添加时间的效果: