docker 环境及常用镜像安装

docker环境安装

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 更新yum
yum update
# 安装yum-utils工具
yum install -y yum-utils
#安装htop
yum -y install htop
#安装tree命令
yum -y install tree
#设置阿里云镜像仓库地址
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新yum软件包索引
yum makecache fase
# 安装 docker(这里安装docker-ce版本)
yum install docker-ce docker-ce-cli containerd.io

# 配置阿里云镜像加速器
mkdir -p /etc/docker
# 配置镜像加速地址(需至阿里云平台——容器服务申请)
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
EOF

# 重启docker
systemctl daemon-reload
systemctl restart docker

# 设置开机启动docker
systemctl enable docker


docker常用命令

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 构建镜像
docker build -t 镜像名称
# 加载镜像tar包
docker load -i xxx.tar
# 删除镜像
docker rmi [-f] 镜像名称或ID
-f, --force 强制删除
# 保存镜像
docker save hello-world:latest -o /home/docker/images/hello-world.tar
# 启停容器
docker run -d --name 容器名称 -p 8080:80 镜像名称
docker start 镜像名称
docker stop 镜像名称
# 查看容器中的进程
docker top 镜像名称
# 查看容器元数据
docker inspect 镜像名称
# 从容器内拷贝文件到主机
docker cp 容器id:容器内路径 目的主机路径
# 查看容器日志
docker logs [可选参数] 容器ID
--details 显示提供给日志的其他详细信息
-f, --follow 跟踪日志输出
-n, --tail string 指定要显示的日志条数 (默认为全部)
-t, --timestamps 显示时间戳
# 删除容器
docker rm 镜像名称
# 进入容器
docker exec -it 容器名称 容器命令行
# 退出容器
exit

docker安装Portainer

Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 获取portainer-ce镜像
docker search portainer
docker pull portainer/portainer-ce
# 创建volume做持久化
docker volume create portainer_data
# 启动
docker run -d -p 9000:9000 --restart=always --name=portainer \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce

# 查看容器状态,通过 ip:9000 访问web页面
docker ps -a

# 允许远程连接docker,这里配置docker端口为2375,同步需要打开防火墙
# !!!!注意:此方式仅适用于内网环境,生产环境请使用TLS连接,否则直接docker暴露2375端口,极易被挖矿病毒攻击
vim /usr/lib/systemd/system/docker.service
# 找到以下行,修改为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --containerd=/run/containerd/containerd.sock
# 重启docker
systemctl daemon-reload
systemctl restart docker

docker开启远程安全访问(TLS)

通过TLS方式远程安全访问docker,这里配置docker端口为2375,同步需要打开防火墙

首先,创建一个ca文件夹存放公钥和私钥

1
2
3
4
mkdir /usr/local/userSh
cd /usr/local/userSh
touch tls.sh
vi tls.sh

将下列脚本内容复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/bash
#相关配置信息(除IP有用,其他基本咩有用)
#服务器IP或者域名
SERVER="服务器ip"
PASSWORD="nicetry"
COUNTRY="CN"
STATE="Sichuan"
CITY="Hangzhou"
ORGANIZATION="nicetry"
ORGANIZATIONAL_UNIT="Dev"
EMAIL="nicetry@163.com"

###开始生成文件###
echo "开始生成文件"
#创建密钥文件夹
mkdir -p /usr/local/ca
#切换到生产密钥的目录
cd /usr/local/ca
#生成ca私钥(使用aes256加密)
openssl genrsa -aes256 -passout pass:$PASSWORD -out ca-key.pem 4096
#生成ca证书,填写配置信息
openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca.pem -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL"

#生成server证书私钥文件
openssl genrsa -out server-key.pem 4096
#生成server证书请求文件
openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server.csr
#配置白名单 你使用的是服务器Ip的话,请将前面的DNS换成IP echo subjectAltName = IP:$SERVER,IP:0.0.0.0 >> extfile.cnf
sh -c 'echo "subjectAltName = DNS:'$SERVER',IP:0.0.0.0" >> extfile.cnf'
sh -c 'echo "extendedKeyUsage = serverAuth" >> extfile.cnf'
#使用CA证书及CA密钥以及上面的server证书请求文件进行签发,生成server自签证书
openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem -extfile extfile.cnf

#生成client证书RSA私钥文件
openssl genrsa -out key.pem 4096
#生成client证书请求文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr

sh -c 'echo extendedKeyUsage=clientAuth >> extfile.cnf'
#生成client自签证书(根据上面的client私钥文件、client证书请求文件生成)
openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out cert.pem -extfile extfile.cnf

#更改密钥权限
chmod 0400 ca-key.pem key.pem server-key.pem
#更改密钥权限
chmod 0444 ca.pem server-cert.pem cert.pem
#删除无用文件
rm client.csr server.csr
#复制密钥文件
cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/
echo "生成文件完成"
###生成结束###

执行脚本,在/usr/local/ca/ 目录下生成ca证书

1
sh tls.sh

修改docker配置文件

1
2
3
4
5
6
vim /usr/lib/systemd/system/docker.service
# 找到以下行,修改为
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --containerd=/run/containerd/containerd.sock
# 重启docker,同时需放开2375端口防火墙
systemctl daemon-reload
systemctl restart docker

Portainer中使用TLS 方式,上传cert.pemkey.pem 文件

1654156409795

docker安装netdata

Netdata 是一款 Linux 性能实时监测工具 ,其自身是一个高度优化的 Linux 守护进程,它为 Linux 系统,应用程序,SNMP 服务等提供实时的性能监测,并通过可视化图表信息呈现至web页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 获取netdata镜像
docker search netdata
docker pull netdata/netdata
# 启动
docker run -d --name=netdata \
-p 19999:19999 \
-v netdataconfig:/etc/netdata \
-v netdatacache:/var/cache/netdata \
-v netdatalib:/var/lib/netdata \
-v /etc/passwd:/host/etc/passwd:ro \
-v /etc/group:/host/etc/group:ro \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /etc/os-release:/host/etc/os-release:ro \
--restart unless-stopped \
--cap-add SYS_PTRACE \
--security-opt apparmor=unconfined \
netdata/netdata

# 查看容器状态,通过 ip:19999 访问web页面
docker ps -a

docker-compose安装

docker-compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的 docker应用工具。使用compose,你能通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件 创建和运行所有的服务。重点可以启动多个容器!

方式一:通过pip3安装

1
2
3
4
5
6
7
8
# 安装pip
yum -y install python-pip
# 更新pip3
pip3 install --upgrade pip
# 安装docker-compose
pip3 install docker-compose
# 查看docker-compose版本
docker-compose version

方式二:离线安装

访问https://github.com/docker/compose/releases,下载 docker-compose-Linux-x86_64 ,下载后重命名文件为 docker-compose ,可通过FTP工具上传到服务器/usr/local/bin/ 目录下

1
2
3
4
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 查看docker-compose版本
docker-compose verison

docker-compose 安装 Nginx

创建nginx 目录,在目录下编辑 docker-compose.yml 文件

1
2
mkdir -p /opt/docker/nginx && cd /opt/docker/nginx
vim docker-compose.yml

内容如下,version 版本号需要与docker-compose 版本对应,不然会报错

CentOS7中Docker文件挂载,容器中没有执行权限,故需添加参数

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'
services:
nginx:
image: nginx # 镜像名称
container_name: nginx # 容器名字
restart: always # 开机自动重启
ports: # 端口号绑定(宿主机:容器内)
- '80:80'
- '443:443'
volumes: # 目录映射(宿主机:容器内)
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./conf.d:/etc/nginx/conf.d
- ./html:/usr/share/nginx/html

需要事先准备nginx.conf 文件在挂载目录./conf/nginx.conf,否则会报试图将文件挂载至目录的错误(_因docker挂载目录文件,若挂载的宿主机目录不存在默认会创建一个新directory ,若原本想挂载的是 file 而docker默认创建的是directory 则会报该错误_)

  • nginx.conf配置如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#user  nobody;
worker_processes 1;

events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {
listen 80;
server_name localhost;

#access_log logs/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

需要注意 locationroot 的配置,因为之前选择了挂载,所以需要填写为容器内的html 路径,否则会报404 错误

至此 nginx 目录结构为

1
2
3
4
5
6
|-- conf
| `-- nginx.conf
|-- conf.d
|-- docker-compose.yml
`-- html
|`-- index.html

执行命令启动Nginx容器,通过 ip:80 访问是否启动成功

1
docker-compose up -d nginx

docker-compose 安装 MySQL

创建 MySQL 目录,在目录下编辑 docker-compose.yml 文件

1
2
mkdir -p /opt/docker/mysql && cd /opt/docker/mysql
vim docker-compose.yml

内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'
services:
mysql:
image: mysql #mysql镜像,可指定标签
container_name: mysql-db #容器名
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci #设置utf8字符集
restart: always
environment:
MYSQL_ROOT_PASSWORD: root #root管理员用户密码
ports:
- '3306:3306' #host物理直接映射端口为6606
volumes:
- ./data/db:/var/lib/mysql #mysql数据库挂载到host物理机目录/e/docker/mysql/data/db
- ./data/conf:/etc/mysql/conf.d #容器的配置目录挂载到host物理机目录/e/docker/mysql/data/conf

执行命令启动 MySQL 容器,查看是否启动成功

1
2
3
4
5
6
7
8
9
10
11
12
13
docker-compose up -d mysql
# 进入容器
docker exec -it mysql-db bash
# 登录mysql
mysql -uroot -p你的密码
# 切换数据库
use mysql
# 授予用户所有远程访问权限
grant all privileges on *.* to 'root'@'%';
# 修改用户加密方式为 mysql_native_password
alter user 'root'@'%' identified with mysql_native_password by '你的密码';
# 刷新生效,可使用db客户端远程连接数据库(若未及时生效,可重启容器)
flush privileges;

docker-compose 安装 kodbox

创建 MySQL 目录, 创建文件.env来设置环境变量(必须修改等号右边的值,形式如 MYSQL_USER=kodbox,值不要包含&符号),这些在docker启动时会自动传入容器

1
2
mkdir -p /opt/docker/kodbox && cd /opt/docker/kodbox
vim .env
1
2
3
4
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=kodbox
MYSQL_USER=kodbox
MYSQL_PASSWORD=kodbox

在目录下创建 docker-compose.yml 文件

1
vim docker-compose.yml

内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
version: '3.5'

services:
db:
image: mariadb #mysql镜像,可指定标签
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
environment:
- "TZ=Asia/Shanghai"
- "MYSQL_ROOT_PASSWORD"
- "MYSQL_DATABASE"
- "MYSQL_USER"
- "MYSQL_PASSWORD"
volumes:
- "./data/mysql/db:/var/lib/mysql" #mysql数据库挂载到host物理机目录/e/docker/mysql/data/db
- "./data/mysql/conf:/etc/mysql/conf.d" #容器的配置目录挂载到host物理机目录/e/docker/mysql/data/conf

app:
image: kodcloud/kodbox
ports:
- 5890:80 #左边80是使用端口,可以修改
links:
- db
- redis
volumes:
- "./site:/var/www/html" #./site是站点目录位置,可以修改
restart: always

redis:
image: redis:alpine
environment:
- "TZ=Asia/Shanghai"
restart: always
volumes:
- ./data/redis/data:/data
- ./data/redis/conf/redis.conf:/etc/redis/redis.conf

执行命令启动 kodboxmysqlredis 三个容器,查看是否启动成功

1
docker-compose up -d

启动成功后通过 IP:5890 访问网盘安装页面,在数据库配置页面修改将MySQLRedis修改如下即可正常访问网盘

1692107656366

docker-compose 安装 Onlyoffice

创建 Onlyoffice 目录,在目录下创建 docker-compose.yml 文件

1
2
mkdir -p /opt/docker/onlyoffice && cd /opt/docker/onlyoffice
vim docker-compose.yml

内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3.5'
services:
onlyoffice:
image: onlyoffice/documentserver # 镜像名称
container_name: onlyoffice # 容器名字
restart: always # 开机自动重启
ports: # 端口号绑定(宿主机:容器内)
- '76531:80'
volumes: # 目录映射(宿主机:容器内)
- ./data/logs:/var/log/onlyoffice
- ./data/data:/var/www/onlyoffice/Data
- ./data/lib:/var/lib/onlyoffice
- ./data/db:/var/lib/postgresql

执行命令启动 Onlyoffice 容器,查看是否启动成功

1
docker-compose up -d

docker 环境及常用镜像安装
http://dunkingcurry30.github.io/2022/06/07/docker环境安装/
作者
Dunking Curry
发布于
2022年6月7日
许可协议