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