Docker学习笔记

  • Buddy-Deus
  • June 14, 2019
  1. 1. 概述
  2. 2. 建立网络
  3. 3. 功能容器
    1. 3.1. Nginx
    2. 3.2. Redis
    3. 3.3. MongoDB
    4. 3.4. Node.js

最近学习Docker特此记录下情况,docker采用类似虚拟机方式,模拟真实部署之后的运行环境,确保了生产、测试环境的统一。

概述

docker的各个运行环境被称为容器,容器间物理隔离,可以通过网络连接方式进行桥接

建立网络

docker容器网络模式区分为三种形式:

建议docker测试中,采用自定义网络,后续所有配置默认以自定义网络配置。


1
$ docker network create --subnet=100.0.0.0/16 net

建立了自定义网络后可以不需要使用ip绑定,该网络下所有服务可以通过--name设置的别名进行直接访问

1
$ docker network ls

功能容器

下面列举了常用的几种功能容器的配置方式。

所有配置,默认工作路径为 /data/docker,下列配置以工作目录为基础目录

Nginx

反向代理服务

1
2
3
$ docker pull nginx
$ mkdir -p nginx
$ cd nginx
1
2
$ mkdir -p conf.d wwwroot
$ docker run --net net --name nginx -d -v $PWD/nginx.conf:/etc/nginx/nginx.conf -v $PWD/conf.d:/etc/nginx/conf.d -v $PWD/wwwroot:/wwwroot -p 80:80 nginx

nginx需要正常运作,必须对外绑定使用端口(默认是80端口)

nginx配置映射为:

/etc/nginx/nginx.conf => nginx/nginx.conf

/etc/nginx/conf.d/ => nginx/conf.d/

/wwwroot => nginx/wwwroot

nginx支持纯静态网站,这边使用nginx/wwwroot作为静态网站目录,对应配置文件中的/wwwroot

Redis

redis缓存数据库

1
2
3
$ docker pull redis
$ mkdir -p redis
$ cd redis
1
$ docker run --net net --ip 100.0.0.10 --name redis -d -v $PWD:/data redis redis-server --appendonly yes

Debug环境: 建议增加参数-p 6379:6379(在-d参数后),可以在本机直接通过redis://100.0.0.10:6379方式连接

MongoDB

NoSql数据库

1
2
3
$ docker pull mongo
$ mkdir -p mongodb
$ cd mongodb
1
$ docker run --net net --ip 100.0.0.11 --name mongodb -d -v $PWD:/data/db mongo --directoryperdb

Debug环境: 建议增加参数-p 27017:27017(在-d参数后),可以在本机直接通过mongodb://100.0.0.11:27017方式连接

1
$ docker exec -it mongodb mongo --host 100.0.0.11

Node.js

Node.js项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
FROM node:lts

WORKDIR /data
# 这是工作路径

COPY . .
# 复制当前目录所有内容到工作路径

RUN npm install
# 安装npm必要内容

EXPOSE 8080
# 对外公布端口

CMD ["npm", "start"]
# 启动脚本,在package.json中配置scripts
1
2
3
4
5
6
7
.git
.idea
node_modules
.gitignore
Dockerfile
package-lock.json
README.md
1
2
3
4
5
6
7
8
9
10
11
{
"name": "project_name",
"version": "0.0.1",
"private": true,
"main": "index",
"scripts": {
"start": "node index.js"
},
"dependencies": {
}
}
1
2
3
4
5
$ mkdir /data/git/reponame
$ cd /data/git/reponame
// 下载git内容,通过ssh方式
$ git clone git@github.com:username/reponame.git .
$ docker build --rm -t reponame
1
2
$ mkdir -p reponame
$ cd reponame
1
$ docker run --net net --ip 100.0.1.11 --name reponame -d -v $PWD:/data/upload reponame

建议项目容器IP从100.0.1.11开始