Docker是干什么用的
很多人一开始学习Docker的时候,感觉Docker很像虚拟机,误以为Docker就是虚拟机。其实Docker不是虚拟机!这个千万不要搞错了!先记下这个硬性结果,后续真正搞环境搭建、项目部署的时候,就会明白了。
现代软件开发的目标之一是应用程序既能运行在同一主机或集群上,又能彼此隔离,这样它们就不会过度干扰彼此的操作或维护,但由于要运行包、库和其他软件组件,这样就会变得会比较困难。
解决这个问题的方案之一是用虚拟机,它将相同硬件上的应用程序完全隔离,并将软件组件之间的冲突和硬件资源之间的竞争降到最低,但是虚拟机体积比较庞大,每个虚拟机都需要自己的操作系统,所以通常是GB大小而且很难维护和升级。
与虚拟机相反,容器将应用程序的执行环境彼此隔离,但共享底层OS内核。它们通常以兆字节为单位,使用的资源比虚拟机少得多,而且几乎是立即启动的。可以做到在相同的硬件上更密集地打包,而不需要花费太多的精力和开销。
容器提供了一种高效和高粒度的机制,将软件组件组合到现代企业所需的各种应用程序和服务堆栈中,并保持这些软件组件的更新和维护。
镜像与容器的关系
镜像与容器的关系就像类与对象的关系,类是对象的抽象,对象是类的实例。
下载一个镜像可以用来启动多个容器。
Docker的安装
# 查看系统的内核:uname -r# 查看系统配置cat /etc/os-release[root@iZwz99sm8v95sckz8bd2c4Z ~]# uname -r3.10.0-957.21.3.el7.x86_64[root@iZwz99sm8v95sckz8bd2c4Z ~]# cat /etc/os-releaseNAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID="7"PRETTY_NAME="CentOS Linux 7 (Core)"ANSI_COLOR="0;31"CPE_NAME="cpe:/o:centos:centos:7"HOME_URL="https://www.centos.org/"BUG_REPORT_URL="https://bugs.centos.org/"CENTOS_MANTISBT_PROJECT="CentOS-7"CENTOS_MANTISBT_PROJECT_VERSION="7"REDHAT_SUPPORT_PRODUCT="centos"REDHAT_SUPPORT_PRODUCT_VERSION="7"
Docker的安装步骤
(1)卸载旧的版本
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
(2)下载需要的安装包
yum install -y yum-utils
(3)设置镜像的仓库
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo #国外的地址# 设置阿里云的Docker镜像仓库yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #国外的地址
(4)更新yum软件包索引
yum makecache fast
(5)安装docker相关的配置
# docker-ce 是社区版,docker-ee 企业版yum install docker-ce docker-ce-cli containerd.io# 出现了completed即安装成功。
(6)启动Docker
systemctl start docker# 查看当前版本号,是否启动成功docker version# 设置开机自启动systemctl enable docker
(7)hello-world
# 没有会去自动下载docker run hello-world# 查看下载的hello world镜像[root@iZwz99sm8v95sckz8bd2c4Z lib]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest bf756fb1ae65 11 months ago 13.3kB
Docker的卸载
# 1. 卸载依赖yum remove docker-ce docker-ce-cli containerd.io# 2. 删除资源 . /var/lib/docker是docker的默认工作路径rm -rf /var/lib/docker
Docker常用命令
基础命令
docker version #查看docker的版本信息docker info #查看docker的系统信息,包括镜像和容器的数量docker 命令 --help #帮助命令(可查看可选的参数)docker COMMAND --help# 命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/
镜像命令
# docker images 查看本地主机的所有镜像[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest bf756fb1ae65 11 months ago 13.3kB# 解释:1.REPOSITORY 镜像的仓库源2.TAG 镜像的标签3.IMAGE ID 镜像的id4.CREATED 镜像的创建时间5.SIZE 镜像的大小# 可选参数-a/--all 列出所有镜像-q/--quiet 只显示镜像的id
# docker search 搜索镜像[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 10308 [OK]mariadb MariaDB is a community-developed fork of MyS… 3819 [OK]mysql/mysql-server Optimized MySQL Server Docker images. Create… 754 [OK]percona Percona Server is a fork of the MySQL relati… 517 [OK]centos/mysql-57-centos7 MySQL 5.7 SQL database server 86mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 79centurylink/mysql Image containing mysql. Optimized to be link… 60 [OK]#可选参数Search the Docker Hub for imagesOptions:-f, --filter filter Filter output based on conditions provided--format string Pretty-print search using a Go template--limit int Max number of search results (default 25)--no-trunc Don't truncate output# 搜索收藏数大于3000的镜像[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000NAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 10308 [OK]mariadb MariaDB is a community-developed fordockerk of MyS… 3819 [OK]
# docker pull 镜像名[:tag] 下载镜像[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysqlUsing default tag: latest #如果不写tag默认就是latestlatest: Pulling from library/mysql6ec7b7d162b2: Pull complete #分层下载,docker image的核心-联合文件系统fedd960d3481: Pull complete7ab947313861: Pull complete64f92f19e638: Pull complete3e80b17bff96: Pull complete014e976799f9: Pull complete59ae84fee1b3: Pull completeffe10de703ea: Pull complete657af6d90c83: Pull complete98bfb480322c: Pull complete6aa3859c4789: Pull complete1ed875d851ef: Pull completeDigest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 #签名Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest #下载来源的真实地址 #docker pull mysql等价于docker pull docker.io/library/mysql:latest## 指定版本下载[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.75.7: Pulling from library/mysql6ec7b7d162b2: Already existsfedd960d3481: Already exists7ab947313861: Already exists64f92f19e638: Already exists3e80b17bff96: Already exists014e976799f9: Already exists59ae84fee1b3: Already exists7d1da2a18e2e: Pull complete301a28b700b9: Pull complete529dc8dbeaf3: Pull completebc9d021dc13f: Pull completeDigest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173Status: Downloaded newer image for mysql:5.7docker.io/library/mysql:5.7
# docker rmi 删除镜像#1.删除指定的镜像id[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id#2.删除多个镜像id[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id 镜像id 镜像id#3.删除全部的镜像id[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f $(docker images -aq)
容器命令
docker pull centos
docker run [可选参数] image#参数说明--name="名字" 指定容器名字-d 后台方式运行-it 使用交互方式运行,进入容器查看内容-p 指定容器的端口(-p ip:主机端口:容器端口 配置主机端口映射到容器端口-p 主机端口:容器端口-p 容器端口)-P 随机指定端口(大写的P)
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it centos /bin/bash[root@bd1b8900c547 /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#exit 停止并退出容器(后台方式运行则仅退出)#Ctrl+P+Q 不停止容器退出[root@bd1b8900c547 /]# exitexit[root@iZwz99sm8v95sckz8bd2c4Z ~]#
#docker ps# 列出当前正在运行的容器-a # 列出所有容器的运行记录-n=? # 显示最近创建的n个容器-q # 只显示容器的编号[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESbca129320bb5 centos "/bin/bash" 4 minutes ago Exited (0) 3 minutes ago optimistic_shternbd1b8900c547 centos "/bin/bash" 6 minutes ago Exited (0) 5 minutes ago cool_teslacf6adbf1b506 bf756fb1ae65 "/hello" 5 hours ago Exited (0) 5 hours ago optimistic_darwin
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -fdocker rm -f $(docker ps -aq) #删除所有的容器docker ps -a -q|xargs docker rm #删除所有的容器
docker start 容器id #启动容器docker restart 容器id #重启容器docker stop 容器id #停止当前运行的容器docker kill 容器id #强制停止当前容器
其他常用命令
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs --helpUsage: docker logs [OPTIONS] CONTAINERFetch the logs of a containerOptions:--details Show extra details provided to logs-f, --follow Follow log output--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)-n, --tail string Number of lines to show from the end of the logs (default "all")-t, --timestamps Show timestamps--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)常用:docker logs -tf 容器iddocker logs --tail number 容器id #num为要显示的日志条数#docker容器后台运行,必须要有一个前台的进程,否则会自动停止#编写shell脚本循环执行,使得centos容器保持运行状态[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"c703b5b1911ff84d584390263a35707b6024816e1f46542b61918a6327a570dc[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc703b5b1911f centos "/bin/sh -c 'while t…" 13 seconds ago Up 10 seconds pedantic_banach[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs -tf --tail 10 c703b5b1911f2020-12-27T03:34:07.255599560Z hi2020-12-27T03:34:12.257641517Z hi2020-12-27T03:34:17.259706294Z hi2020-12-27T03:34:22.261693707Z hi2020-12-27T03:34:27.262609289Z hi2020-12-27T03:34:32.267862677Z hi2020-12-27T03:34:37.270382873Z hi2020-12-27T03:34:42.272414182Z hi2020-12-27T03:34:47.274823243Z hi2020-12-27T03:34:52.277419274Z hi
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911fUID PID PPID C STIME TTY TIME CMDroot 11156 11135 0 11:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;doneroot 11886 11156 0 11:43 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id
# 因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置# 方式一:[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash[root@c703b5b1911f /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@c703b5b1911f /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 03:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;doneroot 279 0 0 03:54 pts/0 00:00:00 /bin/bashroot 315 1 0 03:56 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5root 316 279 0 03:56 pts/0 00:00:00 ps -ef# 方式二:[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker attach c703b5b1911f# docker exec 进入容器后开启一个新的终端,可以在里面操作# docker attach 进入容器正在执行的终端,不会启动新的进程
# 拷贝容器的文件到主机中# docker cp 容器id:容器内路径 目的主机路径# 拷贝宿主机的文件到容器中# docker cp 目的主机路径 容器id:容器内路径[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash[root@c703b5b1911f /]# cd home[root@c703b5b1911f home]# ls#touch 新建文件[root@c703b5b1911f home]# touch test.java[root@c703b5b1911f home]# lstest.java[root@c703b5b1911f home]# exitexit[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc703b5b1911f centos "/bin/sh -c 'while t…" 35 minutes ago Up 35 minutes pedantic_banach[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker cp c703b5b1911f:/home/test.java /home[root@iZwz99sm8v95sckz8bd2c4Z ~]# ls /homehai pan test.java
小结
常用容器部署
Nginx部署
下载nginx镜像
可以到dockerhub官网查看Nginx的详细版本信息 :https://hub.docker.com/_/nginx
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search nginxNAME DESCRIPTION STARS OFFICIAL AUTOMATEDnginx Official build of Nginx. 14207 [OK]jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1932 [OK]richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 797 [OK]linuxserver/nginx An Nginx container, brought to you by LinuxS… 137jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 123tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 107 [OK][root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull nginxUsing default tag: latestlatest: Pulling from library/nginx6ec7b7d162b2: Already existscb420a90068e: Pull complete2766c0bf2b07: Pull completee05167b6a99d: Pull complete70ac9d795e79: Pull completeDigest: sha256:4cf620a5c81390ee209398ecc18e5fb9dd0f5155cd82adcbae532fec94006fb9Status: Downloaded newer image for nginx:latestdocker.io/library/nginx:latest[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images;REPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 f07dfa83b528 5 days ago 448MBnginx latest ae2feff98a0c 11 days ago 133MBcentos latest 300e315adb2f 2 weeks ago 209MB
运行测试
docker run -d --name nginx01 -p 3334:80 nginx-d 后台运行--name 给容器命名-p 3334:80 将宿主机的端口3334映射到该容器的80端口
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d --name nginx01 -p 3334:80 nginx20c896637ff5de8be835797109d62ee2465e28d9d716be5a8d550ef7d547fcf5[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES20c896637ff5 nginx "/docker-entrypoint.…" 7 seconds ago Up 5 seconds 0.0.0.0:3334->80/tcp nginx01
访问测试
本地主机访问测试,curl命令发起请求,如果使用云服务器需要设置安全组。
没设置云服务安全组,只能在本地访问,外网访问不了!
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES20c896637ff5 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 0.0.0.0:3334->80/tcp nginx01[root@iZwz99sm8v95sckz8bd2c4Z ~]# curl localhost:3334<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>
配置文件
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it nginx01 /bin/bashroot@20c896637ff5:/# whereis nginxnginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginxroot@20c896637ff5:/# cd /etc/nginxroot@20c896637ff5:/etc/nginx# lsconf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf# 有些命令docker中没有root@f12b4d977e75:/etc/nginx# llbash: ll: command not foundroot@f12b4d977e75:/etc/nginx# vim nginx.confbash: vim: command not foundroot@f12b4d977e75:/etc/nginx# tail nginx.confsendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;}
安装vim
我们使用Nginx往往需要编写配置文件,但是Nginx官方镜像没有安装vim,需要我们手动进行安装。使用以下命令进行安装:
apt-get install vim# 如果执行上述命令出现提示:Reading package lists... DoneBuilding dependency treeReading state information... DoneE: Unable to locate package vim# 则需要先同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,# 这样才能获取到最新的软件包。执行以下命令来更新:apt-get update
更新完毕再安装即可。我们修改了配置文件,只要重新启动容器docker restart 容器id,改动就可以生效了。
解决vim在终端不能复制的问题:在vim 中输入 :set mouse=r。
拓展:启动项目并设置数据卷,为避免nginx因为修改配置文件导致的错误而无法启动容器,我们可以通过cp命令覆盖配置文件,但是设置数据卷会更为方便。启动Nginx容器的同时设置数据卷的命令:
docker run--name my_nginx-d -p 80:80-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf-v /data/nginx/log:/var/log/nginx-v /data/nginx/html:/usr/share/nginx/htmlnginx# 参数说明:# 第一个-v:挂载nginx的主配置文件,以方便在宿主机上直接修改容器的配置文件# 第二个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx日志# 第三个-v:挂载静态页面目录
启动第二台Nginx
[root@VM-16-10-centos ~]# docker run -d --name nginx02 -p 3344:80 nginxa2db132069238e0a1210d1d2e99cb12333a211dca41ff8622b2edd8b6bdfe2b7[root@VM-16-10-centos ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa2db13206923 nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx02f12b4d977e75 nginx "/docker-entrypoint.…" 16 minutes ago Up 16 minutes 0.0.0.0:3334->80/tcp, :::3334->80/tcp nginx01[root@VM-16-10-centos ~]# curl localhost:3344<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>html { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>
Tomcat部署
拉取tomcat
# 搜索带版本的tomcat[root@VM-16-10-centos ~]# docker search tomcat:8.5NAME DESCRIPTION STARS OFFICIAL AUTOMATEDracerpeter/jetbrains-license-server A dockerized JetBrains License Server based … 2zhaoyanjun/tomcat openjdk:8 tomcat:8.5 开启远程访问 admin admi… 0zhangjh123/tomcat tomcat:8.5-jre8-alpine 0oxnme/tomcat tomcat:8.5-jre8-alpine + fontconfig 0kingchdu/centos_tomcat centos:7.5.1804, jdk:1.8.0_181, tomcat:8.5.34 0acntechie/uaa Docker image with Cloudfoundry UAA, based on… 0hossamgbm/tomcat8 tomcat:8.5.38 for development purposes, defa… 0# 搜索最新的tomcat[root@VM-16-10-centos ~]# docker search tomcatNAME DESCRIPTION STARS OFFICIAL AUTOMATEDtomcat Apache Tomcat is an open source implementati… 3302 [OK]tomee Apache TomEE is an all-Apache Java EE certif… 96 [OK]bitnami/tomcat Bitnami Tomcat Docker Image 44 [OK]rightctrl/tomcat CentOS , Oracle Java, tomcat application ssl… 7 [OK]arm64v8/tomcat Apache Tomcat is an open source implementati… 7amd64/tomcat Apache Tomcat is an open source implementati… 4tomcat2111/pisignage-server PiSignage Server 3 [OK]jelastic/tomcat An image of the Tomcat Java application serv… 3cfje/tomcat-resource Tomcat Concourse Resource 2chenyufeng/tomcat-centos tomcat基于centos6的镜像 1 [OK]tomcatling/jupyterhub_aws 1ppc64le/tomcat Apache Tomcat is an open source implementati… 1tomcat2111/phpredisadmin This is a Docker image for phpredisadmin 0 [OK]softwareplant/tomcat Tomcat images for jira-cloud testing 0 [OK]tomcat2111/bitbucket-pipelines-elasticsearch Elasticsearch for Bitbucket's Pipelines 0store/microsoft/defaultpublisher Zulu for Azure build of OpenJDK 0tomcat0823/auto1 0tomcatengineering/docker_swarm_exporter Prometheus metrics exporter for Docker Swarms 0tomcat2111/papercut-mf PaperCut MF Application Server 0s390x/tomcat Apache Tomcat is an open source implementati… 0tomcat2111/piwik Matomo (formerly Piwik) image 0tomcat2111/redaxo Redaxo 0tomcatengineering/pg_backup_rotated Clone of martianrock/pg_backup_rotated but w… 0secoresearch/tomcat-varnish Tomcat and Varnish 5.0 0 [OK]tomcat2111/nextcloud Nextcloud container with environment variabl… 0 [OK]# 拉取带版本的tomcat[root@VM-16-10-centos ~]# docker pull tomcat:8.58.5: Pulling from library/tomcatdbba69284b27: Pull complete9baf437a1bad: Pull complete6ade5c59e324: Pull completeb19a994f6d4c: Pull complete43c0aceedb57: Pull complete24e7c71ec633: Pull complete612cf131e488: Pull completedc655e69dd90: Pull completec370021cb71e: Pull completef0c25149f239: Pull completeDigest: sha256:8d7231354284be82ddc4567b209f4fea3a6f42f4f9626005e793953fc0a2d066Status: Downloaded newer image for tomcat:8.5docker.io/library/tomcat:8.5# 拉取最新的tomcat[root@VM-16-10-centos ~]# docker pull tomcatUsing default tag: latestlatest: Pulling from library/tomcatdbba69284b27: Already exists9baf437a1bad: Already exists6ade5c59e324: Already existsb19a994f6d4c: Already exists43c0aceedb57: Already exists24e7c71ec633: Already exists612cf131e488: Already existsdc655e69dd90: Already existsefe57b7441f6: Pull complete8db51a0119f4: Pull completeDigest: sha256:263f93ac29cb2dbba4275a4e647b448cb39a66334a6340b94da8bf13bde770aaStatus: Downloaded newer image for tomcat:latestdocker.io/library/tomcat:latest
运行测试
[root@VM-16-10-centos ~]# docker run -d -p 3335:8080 --name tomcat01 tomcatee95b362bc64a8d3b3f90fbb749cc9ce10e1aaf351a83c7d7c2beca9fc0bc168
进入容器
1.容器中的命令是少了
2.阿里云镜像默认下载的是最小的镜像,保证最小的运行环境(所以刚开始启动会404)。
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it tomcat01 /bin/bashroot@7136295a6082:/usr/local/tomcat# lsBUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist workroot@7136295a6082:/usr/local/tomcat# cd webapps.distroot@7136295a6082:/usr/local/tomcat/webapps.dist# lsROOT docs examples host-manager managerroot@7136295a6082:/usr/local/tomcat/webapps.dist# cd ROOTroot@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT# lsRELEASE-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.svgroot@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT# cd ../../root@7136295a6082:/usr/local/tomcat# cd webappsroot@7136295a6082:/usr/local/tomcat/webapps# lsroot@7136295a6082:/usr/local/tomcat/webapps# cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/root@7136295a6082:/usr/local/tomcat/webapps# lsROOT docs examples host-manager managerroot@7136295a6082:/usr/local/tomcat/webapps# exitexit
访问测试
# 直接访问[root@VM-16-10-centos ~]# curl localhost:3335<!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 ~]## 进入容器操作后访问[root@iZwz99sm8v95sckz8bd2c4Z ~]# curl localhost:3335<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>Apache Tomcat/9.0.41</title><link href="favicon.ico" rel="icon" type="image/x-icon" /><link href="tomcat.css" rel="stylesheet" type="text/css" /></head><body><div id="wrapper"><div id="navigation" class="curved container"><span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span><span id="nav-hosts"><a href="/docs/">Documentation</a></span><span id="nav-config"><a href="/docs/config/">Configuration</a></span><span id="nav-examples"><a href="/examples/">Examples</a></span><span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span><span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span><span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span><br class="separator" /></div>
Mysql部署
下载并运行
# 拉取并运行容器docker run -d --name mysql-5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7# 参数说明# -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,# 外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。# MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 默认账号root 用户的密码。
进入容器查看MySQL服务
进入容器,并通过账号root查看MySQL服务能否正常连接。
docker exec -it 9b3aad6819ff /bin/bashmysql -h localhost -u root -p
ElacticSearch部署
下载并运行

# 添加 ’-e ES_JAVA_OPTS="-Xms128m -Xmx512m" ‘ 配置ElasticSearch的虚拟机占用的内存大小。# docker stats 查看资源占用情况# 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# 下载并运行[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.23b8cd4991814896c523ee67b84ce198e32bd82b1a62d512b198138a58ca946f1[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3b8cd4991814 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[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker stats[root@VM-16-10-centos ~]# curl localhost:9200{"name" : "89a915055741","cluster_name" : "docker-cluster","cluster_uuid" : "IeN38Z9DRjuKuVJwKQz71g","version" : {"number" : "7.6.2","build_flavor" : "default","build_type" : "docker","build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f","build_date" : "2020-03-26T06:34:37.794943Z","build_snapshot" : false,"lucene_version" : "8.4.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"}[root@VM-16-10-centos ~]#
Kibana连接ES
可视化
下载安装
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
参考资料
参考资料
- 【狂神说Java】Docker最新超详细版教程通俗易懂
- Windows10家庭版添加Hyper-V的方法
- DOCKER安装JDK1.8
- Docker是干什么用的?
- 什么是Docker容器,它有什么作用?
- Docker快速入门总结笔记
- Docker笔记:同上
https://www.runoob.com/docker/docker-command-manual.html
https://blog.csdn.net/qq_34936541/article/details/104890251
