凡是过往,皆为序章

0%

Docker-03

Docker 的 实操练习。


Docker 安装 Nginx

步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1、搜索镜像 建议到docker hub上下载
docker search nginx

# 2、下载最新镜像
docker pull nginx

# 3、启动镜像
docker run -d --name nginx01 -p:3344:80 nginx
# -d 后台方式启动 --name 不写默认nginx,若有多个,指定名字,例如nginx01
# -p:宿主机端口:docker容器端口 : 指定宿主机和nginx容器的端口对应关系
# 最后一个是镜像名字

# 启动成功后,可通过下面命令验证,得到nginx的欢迎界面即为成功
curl localhost:3344

然后可以通过 ip:3344 访问,即可看到 nginx 欢迎界面。

关于 -p3344:80 端口暴露的概念

思考问题:我们每次改动 nginx 配置文件,都需要进入容器内部?十分的麻烦,我要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改?

这里需要用到后期学习的数据卷的技术!

Docker 安装 Tomcat

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
# 官方的使用,会自动启动tomcat服务
docker run -it --rm tomcat # --rm 代表用完即删,一般用于测试

# 我们学习初期不使用以上方式,正常下载即可
docker pull tomcat:9.0

# 启动镜像
docker run -d -p:3355:8080 --name tomcat01 tomcat:9.0

# 以上便可根据ip:3355访问,可以分为tomcat 但是404 not found

# 容器的目录结构
root@e4cdba7e5c42:/usr/local/tomcat# ls -al
total 128
drwxr-xr-x. 1 root root 30 Nov 19 06:16 .
drwxr-xr-x. 1 root root 20 Nov 19 06:12 ..
-rw-r--r--. 1 root root 18982 Nov 12 15:41 BUILDING.txt
-rw-r--r--. 1 root root 5409 Nov 12 15:41 CONTRIBUTING.md
-rw-r--r--. 1 root root 57092 Nov 12 15:41 LICENSE
-rw-r--r--. 1 root root 2333 Nov 12 15:41 NOTICE
-rw-r--r--. 1 root root 3257 Nov 12 15:41 README.md
-rw-r--r--. 1 root root 6898 Nov 12 15:41 RELEASE-NOTES
-rw-r--r--. 1 root root 16507 Nov 12 15:41 RUNNING.txt
drwxr-xr-x. 2 root root 4096 Nov 19 06:16 bin
drwxr-xr-x. 1 root root 22 Nov 23 11:43 conf
drwxr-xr-x. 2 root root 4096 Nov 19 06:16 lib
drwxrwxrwx. 1 root root 177 Nov 23 11:43 logs
drwxr-xr-x. 2 root root 134 Nov 19 06:16 native-jni-lib
drwxrwxrwx. 2 root root 30 Nov 19 06:16 temp
drwxr-xr-x. 2 root root 6 Nov 19 06:16 webapps
drwxr-xr-x. 7 root root 81 Nov 12 15:38 webapps.dist
drwxrwxrwx. 2 root root 6 Nov 12 15:35 work

# 进入容器
docker exec -it tomcat01 /bin/bash
# 发现问题,命令少了,webapps目录下没有内容,所以 404
# 解决:可以发现webapps.dist下有ROOT等文件,所以把webapps.dist里的内容复制进webapps下即可。

cp -r webapps.dist/* webapps

再次访问网页,成功。

思考问题:我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps ,我们在外部放置项目,就自动同步到内部就好了!

Docker安装MySQL

1
2
3
docker pull mysql

docker run -p 3306:3306 --name mysql01 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql

此时,docker容器里的mysql服务启动,并且映射到宿主机的3306端口,可通过宿主机的ip:3306访问mysql服务。

Docker安装SQL server(失败!!)

使用命令下载镜像:docker pull mcr.microsoft.com/mssql/server:2017-latest

使用命令创建并运行SQL server容器,密码root,容器名字sqlserver1

1
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=root"  -p 1433:1433 --name sqlserver1  -d mcr.microsoft.com/mssql/server:2017-latest

Docker安装Oracle(失败)

使用命令下载镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

没有足够空间下载

Docker安装Redis

使用命令docker pull redis 下载镜像

运行redis容器:docker run -itd –name redis01 -p 6379:6379 redis

使用命令行交互模式进入容器:docker exec -it redis01 /bin/bash

然后用redis-cli连接容器的redis进行测试

set test 1

Docker安装MongoDB

Docker 部署 ES + Kibana

es是elasticsearch6搜索引擎,kibana是它的可视化操作界面

1
2
3
4
5
6
7
8
9
10
11
12
13
# ES 暴露的端口很多!
# ES 十分的耗内存
# ES 的数据一般需要放置到安全目录!挂载
# --net somenetwork ? 网络配置

# 启动 es
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.9.3

# 查看CPU状态: docker stats
# 非常耗内存,占了大部分内存空间

#测试es是否启动成功
curl localhost:9200

可视化

1、portainer(先用这个): Docker图形化管理工具!提供一个后台面板供我们操作

1
2
# 使用命令
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true --name portainer01 portainer/portainer

访问测试:ip:8088

~感谢你请我吃糖果~
-------------本文结束,感谢您的阅读,欢迎评论留言!-------------