今天给之前的信息收集平台写个Dockerfile,好久没写,踩了点坑记录一下。
架构是 vue+beego+mysql,vue打包后就不需要再开启服务。
docker常用命令
列表
1
2
3
|
docker ps
docker ps -a
docker images
|
打包、启动、进入
1
2
3
4
|
docker build -t go-moby:1 .
docker run -itd -p 8081:8081 go-moby:1
docker exec -it 838c bash
docker exec -it mysql-moby bash
|
日志
停止、删除操作
1
2
3
|
docker stop $(docker ps -q)
docker rm $(docker ps -aq) 1
docker rmi -f $(docker images -qa)
|
目录结构
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
|
➜ moby tree -L 3
.
├── Dockerfile
├── docker-compose.yml
├── go-moby
│ ├── conf
│ │ └── app.conf
│ ├── dicts
│ │ ├── GeoLite2-ASN.mmdb
│ │ ├── finger.json
│ │ └── subNames.txt
│ ├── go-moby
│ ├── pkg
│ │ └── poc
│ ├── static
│ │ ├── css
│ │ ├── favicon.ico
│ │ ├── fonts
│ │ ├── img
│ │ └── js
│ ├── vendor
│ │ ├── github.com
│ │ ├── go.uber.org
│ │ ├── golang.org
│ │ ├── google.golang.org
│ │ ├── gopkg.in
│ │ └── modules.txt
│ └── views
│ └── index.html
└── mysql
└── init
└── moby.sql
|
mysql
简单启动,很方便的启动一个mysql
1
|
docker run -itd --name mysql-moby -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
|
docker-compose 启动,更加自动化
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
db:
image: "mysql"
restart: always
container_name: mysql-moby
privileged: true
ports:
- "3306:3306"
environment:
# MYSQL_USER: moby
# MYSQL_PASSWORD: moby
MYSQL_DATABASE: moby
MYSQL_ROOT_PASSWORD: xxxxxxxx
volumes:
# - data:/var/lib/mysql
# - ./mysql/config/my.cnf:/etc/my.cnf
- ./mysql/init:/docker-entrypoint-initdb.d/
command: --default-authentication-plugin=mysql_native_password
|
- ./mysql/init:/docker-entrypoint-initdb.d/
放初始化的sql文件
因为另一个web容器需要访问该容器,在初始化sql中需要设置允许其他IP连接数据库。
1
2
3
|
use mysql;
update user set host = '%' where user = 'root';
flush privileges;
|
web 中配置数据库地址为container_name
,解决容器内网IP变化的情况
web
beego 可以打包成二进制文件方便部署。
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
|
FROM centos
COPY go-moby /root/go-moby/
RUN mkdir /root/.config \
&& ls /root/ \
&& cp /root/go-moby/dicts/finger.json /root/.config/finger.json
WORKDIR /root/go-moby/
EXPOSE 8081
|
注意要切换下WORKDIR
默认在/
会出现
1
|
Handler crashed with error can't find templatefile in the path:views/index.html
|
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
web:
build: .
container_name: goweb-moby
image: centos
ports:
- "0.0.0.0:8081:8081"
depends_on:
- db
# 延时,等待mysql启动完毕
command: >
/bin/bash -c '
sleep 15 && /root/go-moby/go-moby;
'
|
1、配置 depends_on 为前面的 db。
2、beego 启动时会先初始化数据库连接,连接失败直接报错,而 docker-compose 启动的时候 mysql 比较慢,因此增加了延时确保初始化时能连上数据库。
3、每次修改web文件需要删除镜像重新生成。
启动