Docker是干什么用的

很多人一开始学习Docker的时候,感觉Docker很像虚拟机,误以为Docker就是虚拟机。其实Docker不是虚拟机!这个千万不要搞错了!先记下这个硬性结果,后续真正搞环境搭建、项目部署的时候,就会明白了。
现代软件开发的目标之一是应用程序既能运行在同一主机或集群上,又能彼此隔离,这样它们就不会过度干扰彼此的操作或维护,但由于要运行包、库和其他软件组件,这样就会变得会比较困难。
解决这个问题的方案之一是用虚拟机,它将相同硬件上的应用程序完全隔离,并将软件组件之间的冲突和硬件资源之间的竞争降到最低,但是虚拟机体积比较庞大,每个虚拟机都需要自己的操作系统,所以通常是GB大小而且很难维护和升级。
与虚拟机相反,容器将应用程序的执行环境彼此隔离,但共享底层OS内核。它们通常以兆字节为单位,使用的资源比虚拟机少得多,而且几乎是立即启动的。可以做到在相同的硬件上更密集地打包,而不需要花费太多的精力和开销。
容器提供了一种高效和高粒度的机制,将软件组件组合到现代企业所需的各种应用程序和服务堆栈中,并保持这些软件组件的更新和维护。

镜像与容器的关系

镜像与容器的关系就像类与对象的关系,类是对象的抽象,对象是类的实例。
下载一个镜像可以用来启动多个容器。

Docker的安装

  1. # 查看系统的内核:
  2. uname -r
  3. # 查看系统配置
  4. cat /etc/os-release
  5. [root@iZwz99sm8v95sckz8bd2c4Z ~]# uname -r
  6. 3.10.0-957.21.3.el7.x86_64
  7. [root@iZwz99sm8v95sckz8bd2c4Z ~]# cat /etc/os-release
  8. NAME="CentOS Linux"
  9. VERSION="7 (Core)"
  10. ID="centos"
  11. ID_LIKE="rhel fedora"
  12. VERSION_ID="7"
  13. PRETTY_NAME="CentOS Linux 7 (Core)"
  14. ANSI_COLOR="0;31"
  15. CPE_NAME="cpe:/o:centos:centos:7"
  16. HOME_URL="https://www.centos.org/"
  17. BUG_REPORT_URL="https://bugs.centos.org/"
  18. CENTOS_MANTISBT_PROJECT="CentOS-7"
  19. CENTOS_MANTISBT_PROJECT_VERSION="7"
  20. REDHAT_SUPPORT_PRODUCT="centos"
  21. REDHAT_SUPPORT_PRODUCT_VERSION="7"

Docker的安装步骤

(1)卸载旧的版本

  1. yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-engine

(2)下载需要的安装包

  1. yum install -y yum-utils

(3)设置镜像的仓库

  1. yum-config-manager \
  2. --add-repo \
  3. https://download.docker.com/linux/centos/docker-ce.repo #国外的地址
  4. # 设置阿里云的Docker镜像仓库
  5. yum-config-manager \
  6. --add-repo \
  7. https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #国外的地址

(4)更新yum软件包索引

  1. yum makecache fast

(5)安装docker相关的配置

  1. # docker-ce 是社区版,docker-ee 企业版
  2. yum install docker-ce docker-ce-cli containerd.io
  3. # 出现了completed即安装成功。

(6)启动Docker

  1. systemctl start docker
  2. # 查看当前版本号,是否启动成功
  3. docker version
  4. # 设置开机自启动
  5. systemctl enable docker

(7)hello-world

  1. # 没有会去自动下载
  2. docker run hello-world
  3. # 查看下载的hello world镜像
  4. [root@iZwz99sm8v95sckz8bd2c4Z lib]# docker images
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. hello-world latest bf756fb1ae65 11 months ago 13.3kB

Docker的卸载

  1. # 1. 卸载依赖
  2. yum remove docker-ce docker-ce-cli containerd.io
  3. # 2. 删除资源 . /var/lib/docker是docker的默认工作路径
  4. rm -rf /var/lib/docker

Docker常用命令

基础命令

  1. docker version #查看docker的版本信息
  2. docker info #查看docker的系统信息,包括镜像和容器的数量
  3. docker 命令 --help #帮助命令(可查看可选的参数)
  4. docker COMMAND --help
  5. # 命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/

镜像命令

  1. # docker images 查看本地主机的所有镜像
  2. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. hello-world latest bf756fb1ae65 11 months ago 13.3kB
  5. # 解释:
  6. 1.REPOSITORY 镜像的仓库源
  7. 2.TAG 镜像的标签
  8. 3.IMAGE ID 镜像的id
  9. 4.CREATED 镜像的创建时间
  10. 5.SIZE 镜像的大小
  11. # 可选参数
  12. -a/--all 列出所有镜像
  13. -q/--quiet 只显示镜像的id
  1. # docker search 搜索镜像
  2. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql
  3. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  4. mysql MySQL is a widely used, open-source relation 10308 [OK]
  5. mariadb MariaDB is a community-developed fork of MyS 3819 [OK]
  6. mysql/mysql-server Optimized MySQL Server Docker images. Create 754 [OK]
  7. percona Percona Server is a fork of the MySQL relati 517 [OK]
  8. centos/mysql-57-centos7 MySQL 5.7 SQL database server 86
  9. mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr 79
  10. centurylink/mysql Image containing mysql. Optimized to be link 60 [OK]
  11. #可选参数
  12. Search the Docker Hub for images
  13. Options:
  14. -f, --filter filter Filter output based on conditions provided
  15. --format string Pretty-print search using a Go template
  16. --limit int Max number of search results (default 25)
  17. --no-trunc Don't truncate output
  18. # 搜索收藏数大于3000的镜像
  19. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000
  20. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  21. mysql MySQL is a widely used, open-source relation… 10308 [OK]
  22. mariadb MariaDB is a community-developed fordockerk of MyS… 3819 [OK]
  1. # docker pull 镜像名[:tag] 下载镜像
  2. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql
  3. Using default tag: latest #如果不写tag默认就是latest
  4. latest: Pulling from library/mysql
  5. 6ec7b7d162b2: Pull complete #分层下载,docker image的核心-联合文件系统
  6. fedd960d3481: Pull complete
  7. 7ab947313861: Pull complete
  8. 64f92f19e638: Pull complete
  9. 3e80b17bff96: Pull complete
  10. 014e976799f9: Pull complete
  11. 59ae84fee1b3: Pull complete
  12. ffe10de703ea: Pull complete
  13. 657af6d90c83: Pull complete
  14. 98bfb480322c: Pull complete
  15. 6aa3859c4789: Pull complete
  16. 1ed875d851ef: Pull complete
  17. Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 #签名
  18. Status: Downloaded newer image for mysql:latest
  19. docker.io/library/mysql:latest #下载来源的真实地址 #docker pull mysql等价于docker pull docker.io/library/mysql:latest
  20. ## 指定版本下载
  21. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7
  22. 5.7: Pulling from library/mysql
  23. 6ec7b7d162b2: Already exists
  24. fedd960d3481: Already exists
  25. 7ab947313861: Already exists
  26. 64f92f19e638: Already exists
  27. 3e80b17bff96: Already exists
  28. 014e976799f9: Already exists
  29. 59ae84fee1b3: Already exists
  30. 7d1da2a18e2e: Pull complete
  31. 301a28b700b9: Pull complete
  32. 529dc8dbeaf3: Pull complete
  33. bc9d021dc13f: Pull complete
  34. Digest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173
  35. Status: Downloaded newer image for mysql:5.7
  36. docker.io/library/mysql:5.7
  1. # docker rmi 删除镜像
  2. #1.删除指定的镜像id
  3. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id
  4. #2.删除多个镜像id
  5. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id 镜像id 镜像id
  6. #3.删除全部的镜像id
  7. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f $(docker images -aq)

容器命令

  1. docker pull centos
  1. docker run [可选参数] image
  2. #参数说明
  3. --name="名字" 指定容器名字
  4. -d 后台方式运行
  5. -it 使用交互方式运行,进入容器查看内容
  6. -p 指定容器的端口
  7. (
  8. -p ip:主机端口:容器端口 配置主机端口映射到容器端口
  9. -p 主机端口:容器端口
  10. -p 容器端口
  11. )
  12. -P 随机指定端口(大写的P)
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it centos /bin/bash
  2. [root@bd1b8900c547 /]# ls
  3. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  1. #exit 停止并退出容器(后台方式运行则仅退出)
  2. #Ctrl+P+Q 不停止容器退出
  3. [root@bd1b8900c547 /]# exit
  4. exit
  5. [root@iZwz99sm8v95sckz8bd2c4Z ~]#
  1. #docker ps
  2. # 列出当前正在运行的容器
  3. -a # 列出所有容器的运行记录
  4. -n=? # 显示最近创建的n个容器
  5. -q # 只显示容器的编号
  6. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. bca129320bb5 centos "/bin/bash" 4 minutes ago Exited (0) 3 minutes ago optimistic_shtern
  11. bd1b8900c547 centos "/bin/bash" 6 minutes ago Exited (0) 5 minutes ago cool_tesla
  12. cf6adbf1b506 bf756fb1ae65 "/hello" 5 hours ago Exited (0) 5 hours ago optimistic_darwin
  1. docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
  2. docker rm -f $(docker ps -aq) #删除所有的容器
  3. docker ps -a -q|xargs docker rm #删除所有的容器
  1. docker start 容器id #启动容器
  2. docker restart 容器id #重启容器
  3. docker stop 容器id #停止当前运行的容器
  4. docker kill 容器id #强制停止当前容器

其他常用命令

  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs --help
  2. Usage: docker logs [OPTIONS] CONTAINER
  3. Fetch the logs of a container
  4. Options:
  5. --details Show extra details provided to logs
  6. -f, --follow Follow log output
  7. --since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  8. -n, --tail string Number of lines to show from the end of the logs (default "all")
  9. -t, --timestamps Show timestamps
  10. --until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  11. 常用:
  12. docker logs -tf 容器id
  13. docker logs --tail number 容器id #num为要显示的日志条数
  14. #docker容器后台运行,必须要有一个前台的进程,否则会自动停止
  15. #编写shell脚本循环执行,使得centos容器保持运行状态
  16. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
  17. c703b5b1911ff84d584390263a35707b6024816e1f46542b61918a6327a570dc
  18. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
  19. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  20. c703b5b1911f centos "/bin/sh -c 'while t…" 13 seconds ago Up 10 seconds pedantic_banach
  21. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs -tf --tail 10 c703b5b1911f
  22. 2020-12-27T03:34:07.255599560Z hi
  23. 2020-12-27T03:34:12.257641517Z hi
  24. 2020-12-27T03:34:17.259706294Z hi
  25. 2020-12-27T03:34:22.261693707Z hi
  26. 2020-12-27T03:34:27.262609289Z hi
  27. 2020-12-27T03:34:32.267862677Z hi
  28. 2020-12-27T03:34:37.270382873Z hi
  29. 2020-12-27T03:34:42.272414182Z hi
  30. 2020-12-27T03:34:47.274823243Z hi
  31. 2020-12-27T03:34:52.277419274Z hi
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911f
  2. UID PID PPID C STIME TTY TIME CMD
  3. root 11156 11135 0 11:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
  4. root 11886 11156 0 11:43 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id
  1. # 因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置
  2. # 方式一:
  3. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
  4. [root@c703b5b1911f /]# ls
  5. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  6. [root@c703b5b1911f /]# ps -ef
  7. UID PID PPID C STIME TTY TIME CMD
  8. root 1 0 0 03:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
  9. root 279 0 0 03:54 pts/0 00:00:00 /bin/bash
  10. root 315 1 0 03:56 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
  11. root 316 279 0 03:56 pts/0 00:00:00 ps -ef
  12. # 方式二:
  13. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker attach c703b5b1911f
  14. # docker exec 进入容器后开启一个新的终端,可以在里面操作
  15. # docker attach 进入容器正在执行的终端,不会启动新的进程
  1. # 拷贝容器的文件到主机中
  2. # docker cp 容器id:容器内路径 目的主机路径
  3. # 拷贝宿主机的文件到容器中
  4. # docker cp 目的主机路径 容器id:容器内路径
  5. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
  6. [root@c703b5b1911f /]# cd home
  7. [root@c703b5b1911f home]# ls
  8. #touch 新建文件
  9. [root@c703b5b1911f home]# touch test.java
  10. [root@c703b5b1911f home]# ls
  11. test.java
  12. [root@c703b5b1911f home]# exit
  13. exit
  14. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
  15. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  16. c703b5b1911f centos "/bin/sh -c 'while t…" 35 minutes ago Up 35 minutes pedantic_banach
  17. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker cp c703b5b1911f:/home/test.java /home
  18. [root@iZwz99sm8v95sckz8bd2c4Z ~]# ls /home
  19. hai pan test.java

小结

1650163550(1).jpg

常用容器部署

Nginx部署

下载nginx镜像

可以到dockerhub官网查看Nginx的详细版本信息 :https://hub.docker.com/_/nginx

  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search nginx
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. nginx Official build of Nginx. 14207 [OK]
  4. jwilder/nginx-proxy Automated Nginx reverse proxy for docker con 1932 [OK]
  5. richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of 797 [OK]
  6. linuxserver/nginx An Nginx container, brought to you by LinuxS 137
  7. jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho 123
  8. tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp 107 [OK]
  9. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull nginx
  10. Using default tag: latest
  11. latest: Pulling from library/nginx
  12. 6ec7b7d162b2: Already exists
  13. cb420a90068e: Pull complete
  14. 2766c0bf2b07: Pull complete
  15. e05167b6a99d: Pull complete
  16. 70ac9d795e79: Pull complete
  17. Digest: sha256:4cf620a5c81390ee209398ecc18e5fb9dd0f5155cd82adcbae532fec94006fb9
  18. Status: Downloaded newer image for nginx:latest
  19. docker.io/library/nginx:latest
  20. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images;
  21. REPOSITORY TAG IMAGE ID CREATED SIZE
  22. mysql 5.7 f07dfa83b528 5 days ago 448MB
  23. nginx latest ae2feff98a0c 11 days ago 133MB
  24. centos latest 300e315adb2f 2 weeks ago 209MB

运行测试

  1. docker run -d --name nginx01 -p 3334:80 nginx
  2. -d 后台运行
  3. --name 给容器命名
  4. -p 3334:80 将宿主机的端口3334映射到该容器的80端口
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d --name nginx01 -p 3334:80 nginx
  2. 20c896637ff5de8be835797109d62ee2465e28d9d716be5a8d550ef7d547fcf5
  3. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 20c896637ff5 nginx "/docker-entrypoint.…" 7 seconds ago Up 5 seconds 0.0.0.0:3334->80/tcp nginx01

端口暴露的概念:
1650164461(1).jpg

访问测试

本地主机访问测试,curl命令发起请求,如果使用云服务器需要设置安全组。
没设置云服务安全组,只能在本地访问,外网访问不了!

  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 20c896637ff5 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 0.0.0.0:3334->80/tcp nginx01
  4. [root@iZwz99sm8v95sckz8bd2c4Z ~]# curl localhost:3334
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <title>Welcome to nginx!</title>
  9. <style>
  10. body {
  11. width: 35em;
  12. margin: 0 auto;
  13. font-family: Tahoma, Verdana, Arial, sans-serif;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <h1>Welcome to nginx!</h1>
  19. <p>If you see this page, the nginx web server is successfully installed and
  20. working. Further configuration is required.</p>
  21. <p>For online documentation and support please refer to
  22. <a href="http://nginx.org/">nginx.org</a>.<br/>
  23. Commercial support is available at
  24. <a href="http://nginx.com/">nginx.com</a>.</p>
  25. <p><em>Thank you for using nginx.</em></p>
  26. </body>
  27. </html>

配置文件

  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it nginx01 /bin/bash
  2. root@20c896637ff5:/# whereis nginx
  3. nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
  4. root@20c896637ff5:/# cd /etc/nginx
  5. root@20c896637ff5:/etc/nginx# ls
  6. conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
  7. # 有些命令docker中没有
  8. root@f12b4d977e75:/etc/nginx# ll
  9. bash: ll: command not found
  10. root@f12b4d977e75:/etc/nginx# vim nginx.conf
  11. bash: vim: command not found
  12. root@f12b4d977e75:/etc/nginx# tail nginx.conf
  13. sendfile on;
  14. #tcp_nopush on;
  15. keepalive_timeout 65;
  16. #gzip on;
  17. include /etc/nginx/conf.d/*.conf;
  18. }

安装vim

我们使用Nginx往往需要编写配置文件,但是Nginx官方镜像没有安装vim,需要我们手动进行安装。使用以下命令进行安装:

  1. apt-get install vim
  2. # 如果执行上述命令出现提示:
  3. Reading package lists... Done
  4. Building dependency tree
  5. Reading state information... Done
  6. E: Unable to locate package vim
  7. # 则需要先同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,
  8. # 这样才能获取到最新的软件包。执行以下命令来更新:
  9. apt-get update

更新完毕再安装即可。我们修改了配置文件,只要重新启动容器docker restart 容器id,改动就可以生效了。
解决vim在终端不能复制的问题:在vim 中输入 :set mouse=r。

拓展:启动项目并设置数据卷,为避免nginx因为修改配置文件导致的错误而无法启动容器,我们可以通过cp命令覆盖配置文件,但是设置数据卷会更为方便。启动Nginx容器的同时设置数据卷的命令:

  1. docker run
  2. --name my_nginx
  3. -d -p 80:80
  4. -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
  5. -v /data/nginx/log:/var/log/nginx
  6. -v /data/nginx/html:/usr/share/nginx/html
  7. nginx
  8. # 参数说明:
  9. # 第一个-v:挂载nginx的主配置文件,以方便在宿主机上直接修改容器的配置文件
  10. # 第二个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx日志
  11. # 第三个-v:挂载静态页面目录

启动第二台Nginx

  1. [root@VM-16-10-centos ~]# docker run -d --name nginx02 -p 3344:80 nginx
  2. a2db132069238e0a1210d1d2e99cb12333a211dca41ff8622b2edd8b6bdfe2b7
  3. [root@VM-16-10-centos ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. a2db13206923 nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx02
  6. f12b4d977e75 nginx "/docker-entrypoint.…" 16 minutes ago Up 16 minutes 0.0.0.0:3334->80/tcp, :::3334->80/tcp nginx01
  7. [root@VM-16-10-centos ~]# curl localhost:3344
  8. <!DOCTYPE html>
  9. <html>
  10. <head>
  11. <title>Welcome to nginx!</title>
  12. <style>
  13. html { color-scheme: light dark; }
  14. body { width: 35em; margin: 0 auto;
  15. font-family: Tahoma, Verdana, Arial, sans-serif; }
  16. </style>
  17. </head>
  18. <body>
  19. <h1>Welcome to nginx!</h1>
  20. <p>If you see this page, the nginx web server is successfully installed and
  21. working. Further configuration is required.</p>
  22. <p>For online documentation and support please refer to
  23. <a href="http://nginx.org/">nginx.org</a>.<br/>
  24. Commercial support is available at
  25. <a href="http://nginx.com/">nginx.com</a>.</p>
  26. <p><em>Thank you for using nginx.</em></p>
  27. </body>
  28. </html>

Tomcat部署

拉取tomcat

  1. # 搜索带版本的tomcat
  2. [root@VM-16-10-centos ~]# docker search tomcat:8.5
  3. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  4. racerpeter/jetbrains-license-server A dockerized JetBrains License Server based 2
  5. zhaoyanjun/tomcat openjdk:8 tomcat:8.5 开启远程访问 admin admi 0
  6. zhangjh123/tomcat tomcat:8.5-jre8-alpine 0
  7. oxnme/tomcat tomcat:8.5-jre8-alpine + fontconfig 0
  8. kingchdu/centos_tomcat centos:7.5.1804, jdk:1.8.0_181, tomcat:8.5.34 0
  9. acntechie/uaa Docker image with Cloudfoundry UAA, based on 0
  10. hossamgbm/tomcat8 tomcat:8.5.38 for development purposes, defa 0
  11. # 搜索最新的tomcat
  12. [root@VM-16-10-centos ~]# docker search tomcat
  13. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  14. tomcat Apache Tomcat is an open source implementati 3302 [OK]
  15. tomee Apache TomEE is an all-Apache Java EE certif 96 [OK]
  16. bitnami/tomcat Bitnami Tomcat Docker Image 44 [OK]
  17. rightctrl/tomcat CentOS , Oracle Java, tomcat application ssl 7 [OK]
  18. arm64v8/tomcat Apache Tomcat is an open source implementati 7
  19. amd64/tomcat Apache Tomcat is an open source implementati 4
  20. tomcat2111/pisignage-server PiSignage Server 3 [OK]
  21. jelastic/tomcat An image of the Tomcat Java application serv 3
  22. cfje/tomcat-resource Tomcat Concourse Resource 2
  23. chenyufeng/tomcat-centos tomcat基于centos6的镜像 1 [OK]
  24. tomcatling/jupyterhub_aws 1
  25. ppc64le/tomcat Apache Tomcat is an open source implementati 1
  26. tomcat2111/phpredisadmin This is a Docker image for phpredisadmin 0 [OK]
  27. softwareplant/tomcat Tomcat images for jira-cloud testing 0 [OK]
  28. tomcat2111/bitbucket-pipelines-elasticsearch Elasticsearch for Bitbucket's Pipelines 0
  29. store/microsoft/defaultpublisher Zulu for Azure build of OpenJDK 0
  30. tomcat0823/auto1 0
  31. tomcatengineering/docker_swarm_exporter Prometheus metrics exporter for Docker Swarms 0
  32. tomcat2111/papercut-mf PaperCut MF Application Server 0
  33. s390x/tomcat Apache Tomcat is an open source implementati… 0
  34. tomcat2111/piwik Matomo (formerly Piwik) image 0
  35. tomcat2111/redaxo Redaxo 0
  36. tomcatengineering/pg_backup_rotated Clone of martianrock/pg_backup_rotated but w… 0
  37. secoresearch/tomcat-varnish Tomcat and Varnish 5.0 0 [OK]
  38. tomcat2111/nextcloud Nextcloud container with environment variabl… 0 [OK]
  39. # 拉取带版本的tomcat
  40. [root@VM-16-10-centos ~]# docker pull tomcat:8.5
  41. 8.5: Pulling from library/tomcat
  42. dbba69284b27: Pull complete
  43. 9baf437a1bad: Pull complete
  44. 6ade5c59e324: Pull complete
  45. b19a994f6d4c: Pull complete
  46. 43c0aceedb57: Pull complete
  47. 24e7c71ec633: Pull complete
  48. 612cf131e488: Pull complete
  49. dc655e69dd90: Pull complete
  50. c370021cb71e: Pull complete
  51. f0c25149f239: Pull complete
  52. Digest: sha256:8d7231354284be82ddc4567b209f4fea3a6f42f4f9626005e793953fc0a2d066
  53. Status: Downloaded newer image for tomcat:8.5
  54. docker.io/library/tomcat:8.5
  55. # 拉取最新的tomcat
  56. [root@VM-16-10-centos ~]# docker pull tomcat
  57. Using default tag: latest
  58. latest: Pulling from library/tomcat
  59. dbba69284b27: Already exists
  60. 9baf437a1bad: Already exists
  61. 6ade5c59e324: Already exists
  62. b19a994f6d4c: Already exists
  63. 43c0aceedb57: Already exists
  64. 24e7c71ec633: Already exists
  65. 612cf131e488: Already exists
  66. dc655e69dd90: Already exists
  67. efe57b7441f6: Pull complete
  68. 8db51a0119f4: Pull complete
  69. Digest: sha256:263f93ac29cb2dbba4275a4e647b448cb39a66334a6340b94da8bf13bde770aa
  70. Status: Downloaded newer image for tomcat:latest
  71. docker.io/library/tomcat:latest

运行测试

  1. [root@VM-16-10-centos ~]# docker run -d -p 3335:8080 --name tomcat01 tomcat
  2. ee95b362bc64a8d3b3f90fbb749cc9ce10e1aaf351a83c7d7c2beca9fc0bc168

进入容器

1.容器中的命令是少了
2.阿里云镜像默认下载的是最小的镜像,保证最小的运行环境(所以刚开始启动会404)。

  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it tomcat01 /bin/bash
  2. root@7136295a6082:/usr/local/tomcat# ls
  3. BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
  4. root@7136295a6082:/usr/local/tomcat# cd webapps.dist
  5. root@7136295a6082:/usr/local/tomcat/webapps.dist# ls
  6. ROOT docs examples host-manager manager
  7. root@7136295a6082:/usr/local/tomcat/webapps.dist# cd ROOT
  8. root@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT# ls
  9. RELEASE-NOTES.txt WEB-INF asf-logo-wide.svg bg-button.png bg-middle.png bg-nav.png bg-upper.png favicon.ico index.jsp tomcat.css tomcat.svg
  10. root@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT# cd ../../
  11. root@7136295a6082:/usr/local/tomcat# cd webapps
  12. root@7136295a6082:/usr/local/tomcat/webapps# ls
  13. root@7136295a6082:/usr/local/tomcat/webapps# cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/
  14. root@7136295a6082:/usr/local/tomcat/webapps# ls
  15. ROOT docs examples host-manager manager
  16. root@7136295a6082:/usr/local/tomcat/webapps# exit
  17. exit

访问测试

  1. # 直接访问
  2. [root@VM-16-10-centos ~]# curl localhost:3335
  3. <!doctype html><html lang="en"><head><title>HTTP Status 404 Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/10.0.20</h3></body></html>[root@VM-16-10-centos ~]#
  4. # 进入容器操作后访问
  5. [root@iZwz99sm8v95sckz8bd2c4Z ~]# curl localhost:3335
  6. <!DOCTYPE html>
  7. <html lang="en">
  8. <head>
  9. <meta charset="UTF-8" />
  10. <title>Apache Tomcat/9.0.41</title>
  11. <link href="favicon.ico" rel="icon" type="image/x-icon" />
  12. <link href="tomcat.css" rel="stylesheet" type="text/css" />
  13. </head>
  14. <body>
  15. <div id="wrapper">
  16. <div id="navigation" class="curved container">
  17. <span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
  18. <span id="nav-hosts"><a href="/docs/">Documentation</a></span>
  19. <span id="nav-config"><a href="/docs/config/">Configuration</a></span>
  20. <span id="nav-examples"><a href="/examples/">Examples</a></span>
  21. <span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
  22. <span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
  23. <span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
  24. <br class="separator" />
  25. </div>

Mysql部署

下载并运行

  1. # 拉取并运行容器
  2. docker run -d --name mysql-5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
  3. # 参数说明
  4. # -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,
  5. # 外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  6. # MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 默认账号root 用户的密码。

进入容器查看MySQL服务

进入容器,并通过账号root查看MySQL服务能否正常连接。

  1. docker exec -it 9b3aad6819ff /bin/bash
  2. mysql -h localhost -u root -p

ElacticSearch部署

下载并运行

image.png

  1. # 添加 ’-e ES_JAVA_OPTS="-Xms128m -Xmx512m" ‘ 配置ElasticSearch的虚拟机占用的内存大小。
  2. # docker stats 查看资源占用情况
  3. # docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx512m" elasticsearch:7.6.2
  4. # 下载并运行
  5. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx512m" elasticsearch:7.6.2
  6. 3b8cd4991814896c523ee67b84ce198e32bd82b1a62d512b198138a58ca946f1
  7. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. 3b8cd4991814 elasticsearch:7.6.2 "/usr/local/bin/dock…" 10 seconds ago Up 6 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch01
  10. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker stats
  11. [root@VM-16-10-centos ~]# curl localhost:9200
  12. {
  13. "name" : "89a915055741",
  14. "cluster_name" : "docker-cluster",
  15. "cluster_uuid" : "IeN38Z9DRjuKuVJwKQz71g",
  16. "version" : {
  17. "number" : "7.6.2",
  18. "build_flavor" : "default",
  19. "build_type" : "docker",
  20. "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
  21. "build_date" : "2020-03-26T06:34:37.794943Z",
  22. "build_snapshot" : false,
  23. "lucene_version" : "8.4.0",
  24. "minimum_wire_compatibility_version" : "6.8.0",
  25. "minimum_index_compatibility_version" : "6.0.0-beta1"
  26. },
  27. "tagline" : "You Know, for Search"
  28. }
  29. [root@VM-16-10-centos ~]#

Kibana连接ES

image.png

可视化

下载安装

  1. docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

image.png

参考资料

参考资料


https://www.runoob.com/docker/docker-command-manual.html
https://blog.csdn.net/qq_34936541/article/details/104890251

https://blog.csdn.net/lyk_ffl/article/details/119795457?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2

https://bareth.blog.csdn.net/article/details/114266009?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2