Step1: Basic Theoretical knowledge

Step1.1: Install Docker In Unbuntu 20.0+

1
2
3
4
5
6
7
8
9
10
11
#使用 apt-get 进行安装
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

verify docker is installed successful?

1
sudo docker run hello-world

Step2: How To Use

获取镜像

1
2
3
docker pull [选项] [Docker Registry 地址[:端口号/]仓库名[:标签]]
// 如果不加仓库名,默认 DockerHub 的地址:docker.io
eg:docker pull unbuntu:18.04

运行镜像

1
2
3
4
5
docker run -it --rm ubuntu:18.04 bash			
# -it, -i:交互式操作;-t:是终端交互
# --rm, 容器退出后会随之删除,但一般退出后不会立即删除,为了节省空间
# --unbuntu:18.04 指定运行的容器的名字
# bash: 希望有一个交互的shell ,因此用的是bash

列出镜像

1
docker image ls

image-20210802104114191

ImageID 是唯一的,同一个Image 可以有不同的 Tag标签;

  1. 根据仓库名列出镜像

  2. 列出特定的某个镜像,也就是说指定仓库名字和标签

  3. 以特定格式显示

    1. 列出镜像结果,只包含镜像ID和仓库名
    1
    docker image ls --format "{{.ID}}:{{.Repository}}"

    image-20210802110407790

    1. 打算以表格显示,并且有标题行,可以自己定义列
    1
    docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

    image-20210802110422757

查看镜像体积

1
docker system df	

image-20210802104900226

删除虚悬镜像

定义: 官方更新了镜像,新镜像和旧镜像的名字一样重复了,旧镜像的仓库名和标签都为

1
docker image prune		

中间层镜像

1
docker image ls -a 	

中间层镜像与虚悬镜像不同,虽然他们的tag都是none,中间层镜像就是顶层镜像需要依赖的镜像。

当你删除顶层镜像,随之这个顶层镜像依赖的中间层镜像也会被删除。

删除镜像

安装Mysql

  1. 拉取镜像
1
docker pull mysql:8.0
  1. 运行镜像
1
docker run --name zxhsMysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0

—name 【自己指定的名字】

-e 【environment 的缩写,环境变量】

MYSQL_ROOT_PASSWORD 【环境变量名,设置密码】

-d 【后台运行】

我们可以对mysql进行访问

方式一:进入容器内部使用

基本使用

默认用户是 root

方式二:在最顶层做端口映射,这样在宿主机也可以直接访问,开启端入映射

1
docker run --name mysql02 -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 -d mysql:8.0

-p 【对端口进行映射】

用自己电脑连接一下服务器(记得安全组开设端口哦)

连接成功

只需要我们映射端口,不需要我们刷新权限和开启远程连接这种麻烦的事情

对容器中的数据进行备份(数据卷)

1
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 -d mysql:8.0

/my/own/datadir 【当前宿主机存储数据的目录】

/var/lib/mysql 【容器中存储数据的目录】

这样 /var/lib/mysql 中的数据就会同步到 /my/own/datadir 这个目录下了

Mysql自定义配置文件

容器中的配置文件地址:/etc/mysql/my.cnf

自己定制的配置需要在 :/etc/mysql/conf.d/mysql.cnf 进行配置

1
2
3
4
docker run --name some-mysql 
-v /my/custom:/etc/mysql/conf.d #映射宿主机的配置文件到/etc/musql/conf.d
-v /my/own/datadir:/var/lib/mysql #将数据持久化到宿主机 ps:可以有多个数据卷
-e MYSQL_ROOT_PASSWORD=root -d mysql:8.0

初始化一个新鲜的容器

  • 启动容器创建一个指定数据库
1
docker run -d -p 3307:3306 --name zxh -v /root/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=jingdong  mysql:8.0

-e MYSQL_DATABASE 【初始化时指定数据库】

  • 启动容器时执行对应的sql文件

容器执行sql脚本目录 /docker-entrypoint-initdb.d

1
2
3
docker run -d -p 3307:3306 --name zxh -v /root/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=jingdong 
-v /root/jingdong.sql:/docker-entrypoint-initdb.d/jingdong.sql
mysql:8.0
  • 容器启动指定用户名和密码

-e MYSQL_USER=root

-e MYSQL_PASSWORD=root

安装Redis 6.2.5

1
2
3
4
5
6
7
8
9
10
11
#拉取镜像
docker pull redis:6.2.5
#运行redis映射端口
docker run --name redis-some -p 6379:6379 -d redis:6.2.5
#开启redis持久化
#快照持久化
docker run --name some-redis -p 6370:6379 -v /root/redis:/data -d redis:6.2.5
#AOF
docker run --name some-redis -p 6370:6379 -v /root/redis:/data -d redis:6.2.5 redis-server --appendonly yes


PS ,redis持久化的两种方式

快照

手动生成:进入 redis-cli 运行 save 或者bgsave 会生成一个 dump.rdb 文件, save会阻塞,bgsave不会阻塞(background save)

自动生成:

AOF

生成 appendonly.aof 文件

恢复数据的时候,优先恢复 appendonly.aof 文件

Redis 自定义配置

  1. 宿主机 /root/my/conf/redis.conf

  2. 修改 /root/my/conf/redis.conf 中的配置

bind 0.0.0.0

prot 6380

appendonly yes

  1. 启动 redis 容器加载自定义配置启动
1
docker run  -d -p 6380:6380 --name customer-redis -v /root/my/conf/redis.conf:/etc/redis.conf  redis:6.2.5 redis-server /etc/redis.conf

将宿主机中的 /root/my/conf/redis.conf 映射到容器中的 /etc/redis.conf

并且启动的时候 以 /etc/redis.conf 中的配置启动

  1. 启动redis容器加载自定义配置,同时持久化数据到宿主机
1
2
3
4
docker run  -d -p 6380:6380 --name customer-redis 
-v /root/data:/data #将数据同步到宿主机
-v /root/my/conf/redis.conf:/etc/redis.conf #将自定义配置同步到容器中
redis:6.2.5 redis-server /etc/redis.conf

安装Nignx 1.21.1

1
2
3
4
5
6
#下载镜像
docker pull nginx:1.21.1
#运行
docker run -d --name --nginx -p 80:80 nginx:1.21.1
#基本运行nginx 部署自己的前端系统

Docker compose 模版

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
54
55
56
57
58
59
60
version: "3"
networks:
douy_network:
volumes:
data:
redisdata:
services:
nacos:
image: nacos/nacos-server:2.0.2
container_name: nacos
ports:
- "8848:8848"
environment:
- "JVM_XMS=256m"
- "JVM_XMX=256m"
- "MODE=standalone"
networks:
- douy_network

redis:
image: redis:6.2.5
ports:
- "6379:6379"
volumes:
- redisdata:/data

rabbitmq:
image: rabbitmq:3.7.28-management
ports:
- "15672:15672"
- "5672:5672"
networks:
- douy_network
env_file:
- ./rabbmitq.env
volumes:
- mqdata:/var/lib/rabbitmq

es:
image: elasticsearch:6.8.0
ports:
- "9200:9200"
- "9300:9300"
volumes:
- ./ik/:/usr/share/elasticsearch/plugins/ik
- ./jvm.options:/usr/share/elasticsearch/config/jvm.options
networks:
- douy_network

kibana:
image: kibana:6.8.0
ports:

- "5601:5601"
tworks:
- douy_network
lumes:
- ./kibana.yml:/usr/share/kibana/config/kibana.yml
pends_on:
- es