本文基于狂神对于Docker的讲解归纳的笔记:https://www.bilibili.com/video/BV1og4y1q7M4?from=search&seid=1166728958409685445&spm_id_from=333.337.0.0

  • 1. Docker概述
  • 2. 虚拟化技术和容器化技术
  • 3. Docker的基本组成
  • 4. Docker的安装 ([https://docs.docker.com/engine/install/centos/](https://docs.docker.com/engine/install/centos/))
  • 5. Docker的卸载([https://docs.docker.com/engine/install/centos/](https://docs.docker.com/engine/install/centos/))
  • 6. 配置阿里云镜像加速
  • 7. Docker容器运行流程
  • 8. 底层原理
  • 9. Docker常用命令
    • 9.1 基础命令
    • 9.2 镜像命令
    • 9.3 容器命令
    • 9.4 其他常用命令
  • 10. 图形化管理工具Portaniner安装
    • 10.1 基础命令
  • 11. Docker镜像详解
    • 11.1 什么是镜像
    • 11.2 Docker镜像加载原理
    • 11.3 分层理解
    • 11.4 提交镜像
  • 12. 常用容器部署示例
    • 12.1 Nginx部署
    • 12.2 Tomcat部署
    • 12.3 ElasticSearch部署

1. Docker概述

ss(1)基本介绍 (官网:https://docs.docker.com/)

sdsdsDocker 是一个开源的应用容器引擎,基于 Go 语言 、Apache2.0 协议开源。

sdsdsDocker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

sdsds容器是完全使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。

sdsdsDocke 分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),而我们使用社区版就可以了。

ss(2) 应用场景

sdsdsWeb 应用的自动化打包和发布。

sdsds自动化测试和持续集成、发布。

sdsds在服务型环境中部署和调整数据库或其他的后台应用。

sdsds从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

ss(3) Docker 的优势

sdsdsDocker 是一个用于开发,交付和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。

sdsds1、快速,一致地交付您的应用程序。Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

sdsds[注]:开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

sdsds2、响应式部署和扩展

sdsdsDocker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

sdsds3、在同一硬件上运行更多工作负载

sdsdsDocker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

2. 虚拟化技术和容器化技术

ss(1)虚拟化技术特点:sdsds①. 资源占用多 ②. 冗余步骤多 ③. 启动慢

ss(2)容器化技术:sdsds容器化技术不是模拟的一个完整的操作系统

ss(3)Docker和虚拟机的不同:

ssdsds①. 传统虚拟机,虚拟出硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。

sdssds②. Docker容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟硬件。

sdssds③. 每个容器都是相互隔离的,每个容器都有属于自己的文件系统,互不影响。

ss(4)Docker带来的好处:

ssdsds①. 应用更快的交付和部署:传统是一堆帮助文档,安装程序。而Docker是打包镜像发布测试,一件运行。

ssdsds②. 更便捷的升级和扩缩容:使用了Docker之后,我们部署应用就和搭积木一样。

ssdsds③. 更简单的系统运维:在容器化之后,开发、测试环境 都是高度一致的。

ssdsds④. 更高效的计算资源利用:Docker是内核级别和虚拟化,可以在一个物理机上运行很多的容器实例!服务器的性能可以被压榨到极致。

3. Docker的基本组成

ss(1)Docker的基本组成图:

dssss镜像(Images):docker镜像就可好比是一个模板,可以通过这个模板来创建容器服务,通过这个镜像可以创建多个容器。

dssss容器(container):Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建。容器可以看成是一个简易的Linux系统。
dssss仓库(repository):分为共有仓库和私有仓库,Docker Hub 是国外的仓库,我们可以通过Docker Hub 查相关信息,仓库就是存放镜像的地方。

4. Docker的安装 (https://docs.docker.com/engine/install/centos/)

ss(1)查看系统的内核:uname -r

ss(2)查看系统配置:sdsdscat /etc/os-release

[root@WangWejian ~]# cat /etc/os-release
NAME="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"

ss(3)Docker的安装步骤:

ssdsds①. 卸载旧的版本

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

ssdsds②. 下载需要的安装包 yum install -y yum-utils

ssdsds③. 设置镜像的仓库

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  #国外的地址

ssdsds④. 更新yum软件包索引 yum makecache fast

ssdsds⑤. 安装docker相关的配置 (docker-ce 是社区版,docker-ee 企业版),出现了completed即安装成功。

yum install docker-ce docker-ce-cli containerd.io

ssdsds⑥. 启动Docker

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

ssdsds⑦. 结果:
sdssd
ssdsds⑧. 下载hello-world镜像进行测试:

ssdsds⑨. 查看下载的hello world镜像

[root@iZwz99sm8v95sckz8bd2c4Z lib]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB

5. Docker的卸载(https://docs.docker.com/engine/install/centos/)

6. 配置阿里云镜像加速

ss(1)进入阿里云官网,搜索容器镜像服务:

ss(2)依次执行官方的这四条命令:
ssdsddsdsdsddsdsdss

7. Docker容器运行流程

ss(1)启动一个容器,Docker的运行流程如下图:
ssss

8. 底层原理

ssDocker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket 从客户端访问!Docker Server接收到Docker-Client的指令,就会执行这个指令!
sssssssss

ss(1)Docker为什么比VM Ware快?

ssdsds①. Docker比虚拟机更少的抽象层 ssdsds②. docker利用宿主机的内核,VM需要的是Guest OS
sdsdsddsssds
ss(2)Docker新建一个容器的时候,不需要像虚拟机一样重新加载一个操作系统内核,直接利用宿主机的操作系统,而虚拟机是需要加载Guest OS。Docker和VM的对比如下:
sdsdds

9. Docker常用命令

9.1 基础命令

docker version          #查看docker的版本信息
docker info             #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help       #帮助命令(可查看可选的参数)
docker COMMAND --help

sdsds[常用命令文档查询]:https://docs.docker.com/engine/reference/commandline/docker/

9.2 镜像命令

ss(1)docker images 查看本地主机的所有镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB#解释:
1.REPOSITORY  镜像的仓库源            2.TAG  镜像的标签                   3.IMAGE ID 镜像的id4.CREATED 镜像的创建时间               5.SIZE 镜像的大小# 可选参数            -a/--all 列出所有镜像               -q/--quiet 只显示镜像的id

ss(2)docker search 搜索镜像

[root@WangWejian ~]# docker search
"docker search" requires exactly 1 argument.
See 'docker search --help'.Usage:  docker search [OPTIONS] TERMSearch the Docker Hub for images
[root@WangWejian ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11760     [OK]
mariadb                           MariaDB Server is a high performing open sou…   4483      [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   879                  [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   92
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   89
centurylink/mysql                 Image containing mysql. Optimized to be link…   59                   [OK]
databack/mysql-backup             Back up mysql databases to... anywhere!         53
.............#可选参数
[root@WangWejian ~]# docker search mysql --helpUsage:  docker search [OPTIONS] TERMSearch 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#搜索收藏数大于4000的镜像
[root@WangWejian ~]# docker search mysql --filter=STARS=4000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   11760     [OK]
mariadb   MariaDB Server is a high performing open sou…   4483      [OK]

ss(3)docker pull 镜像名[:tag] 下载镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql
Using default tag: latest            #如果不写tag默认就是latest
latest: Pulling from library/mysql
6ec7b7d162b2: Pull complete          #分层下载,docker image的核心-联合文件系统
fedd960d3481: Pull complete
7ab947313861: Pull complete
64f92f19e638: Pull complete
3e80b17bff96: Pull complete
014e976799f9: Pull complete
59ae84fee1b3: Pull complete
ffe10de703ea: Pull complete
657af6d90c83: Pull complete
98bfb480322c: Pull complete
6aa3859c4789: Pull complete
1ed875d851ef: Pull complete
Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  #下载来源的真实地址  #docker pull mysql等价于docker pull docker.io/library/mysql:latest

sdss指定版本下载:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
6ec7b7d162b2: Already exists
fedd960d3481: Already exists
7ab947313861: Already exists
64f92f19e638: Already exists
3e80b17bff96: Already exists
014e976799f9: Already exists
59ae84fee1b3: Already exists
7d1da2a18e2e: Pull complete
301a28b700b9: Pull complete
529dc8dbeaf3: Pull complete
bc9d021dc13f: Pull complete
Digest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

ss(4)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)

9.3 容器命令

ss(1)拉取一个centos容器 docker pull centos

ss(2)运行容器

docker run [可选参数] image(镜像id)#参数说明
--name="名字"           指定容器名字
-d                     后台方式运行
-it                    使用交互方式运行,进入容器查看内容
-p                     指定容器的端口
(
-p ip:主机端口:容器端口  配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P                     随机指定端口(大写的P)

ss(3)进入容器

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it centos /bin/bash
[root@bd1b8900c547 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

ss(4)退出容器

#exit 停止并退出容器(后台方式运行则仅退出)
#Ctrl+P+Q  不停止容器退出
[root@bd1b8900c547 /]# exit
exit
[root@iZwz99sm8v95sckz8bd2c4Z ~]#

ss(5)列出运行过的容器

#docker ps # 列出当前正在运行的容器
-a   # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q   # 只显示容器的编号[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@WangWejian ~]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS                          PORTS                    NAMES
135ec9f67fa5   centos                "/bin/bash"              3 minutes ago   Exited (0) About a minute ago                            competent_kalam
77f85c510285   tomcat                "catalina.sh run"        5 minutes ago   Exited (130) 3 minutes ago                               elated_panini
d19007a1bf64   tomcat                "catalina.sh run"        3 hours ago     Created                                                  modest_sammet
fd342c4725ae   portainer/portainer   "/portainer"             5 hours ago     Up 5 hours                      0.0.0.0:8088->9000/tcp   nifty_austin
b8305f60a513   tomcat:9.0            "catalina.sh run"        6 hours ago     Created                                                  tomcat01
558b1887f813   nginx                 "/docker-entrypoint.…"   7 hours ago     Exited (0) 6 hours ago                                   nginx01
c090623b3067   centos                "/bin/bash"              25 hours ago    Exited (0) 24 hours ago                                  clever_banach
81519abb9ff7   centos                "/bin/bash"              25 hours ago    Exited (0) 25 hours ago                                  great_lovelace
2c4ee71260c2   centos                "/bin/bash"              25 hours ago    Exited (0) 25 hours ago                                  thirsty_kirch

ss(6)删除容器

docker rm 容器id                 #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq)   #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器

ss(7)启动和停止容器

docker start 容器id          #启动容器
docker restart 容器id        #重启容器
docker stop 容器id           #停止当前运行的容器
docker kill 容器id           #强制停止当前容器

9.4 其他常用命令

ss(1)日志的查看:

[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 容器id
docker 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 ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
c703b5b1911f   centos    "/bin/sh -c 'while t…"   13 seconds ago   Up 10 seconds             pedantic_banach
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs -tf --tail 10 c703b5b1911f
2020-12-27T03:34:07.255599560Z hi
2020-12-27T03:34:12.257641517Z hi
2020-12-27T03:34:17.259706294Z hi
2020-12-27T03:34:22.261693707Z hi
2020-12-27T03:34:27.262609289Z hi
2020-12-27T03:34:32.267862677Z hi
2020-12-27T03:34:37.270382873Z hi
2020-12-27T03:34:42.272414182Z hi
2020-12-27T03:34:47.274823243Z hi
2020-12-27T03:34:52.277419274Z hi

ss(2)查看容器中进程信息:

[root@WangWejian ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED       STATUS       PORTS                    NAMES
fd342c4725ae   portainer/portainer   "/portainer"   5 hours ago   Up 5 hours   0.0.0.0:8088->9000/tcp   nifty_austin
[root@WangWejian ~]# docker top fd342c4725ae
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                14417               14398               0                   18:06               ?                   00:00:01            /portainer

ss(3)查看容器的元数据:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id

ss(4)进入当前正在运行的容器:因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置

sdsdss①、方式一:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
[root@c703b5b1911f /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@c703b5b1911f /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 03:31 ?        00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
root       279     0  0 03:54 pts/0    00:00:00 /bin/bash
root       315     1  0 03:56 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
root       316   279  0 03:56 pts/0    00:00:00 ps -ef

sdsdss②、方式二:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker attach c703b5b1911f

sdsdssdocker exec 进入容器后开启一个新的终端,可以在里面操作

sdsdssdocker attach 进入容器正在执行的终端,不会启动新的进程

sdsdss拷贝容器的文件到主机中

sdsdssdocker 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]# ls
test.java
[root@c703b5b1911f home]# exit
exit
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
c703b5b1911f   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 /home
hai  pan  test.java

ss(5)命令小节的图解:

10. 图形化管理工具Portaniner安装

10.1 基础命令

ssPortaniner是Docker的图形化管理工具,类似的工具还有Rancher(CI/CD再用)

ss下载运行Portaniner镜像并运行,设置本机映射端口为8088

[root@localhost conf]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
Unable to find image 'portainer/portainer:latest' locally
latest: Pulling from portainer/portainer
94cfa856b2b1: Pull complete
49d59ee0881a: Pull complete
a2300fd28637: Pull complete
Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
Status: Downloaded newer image for portainer/portainer:latest
8c525a0137be22965bd1e3944da622a2c4248f8ad20883f4b3ea4f8a6b11e163
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED         STATUS         PORTS                    NAMES
7789d4505a00   portainer/portainer   "/portainer"   6 seconds ago   Up 5 seconds   0.0.0.0:8088->9000/tcp   quirky_sinoussi

ss第一次登录设置admin用户的密码:
ss如果是阿里云服务器记得设置安全组,选择连接本地的Docker,整体界面预览如下图:

11. Docker镜像详解

11.1 什么是镜像

ss镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时(一个程序在运行或者在被执行的依赖)、库,环境变量和配置文件。

11.2 Docker镜像加载原理

ssDocker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是UnionFS联合文件系统。

11.3 分层理解




11.4 提交镜像

使用docker commit 命令提交容器成为一个新的版本
docker commit -m=“提交的描述信息”  -a="作者" 容器id 目标镜像名:[TAG]

ss由于默认的Tomcat镜像的webapps文件夹中没有任何内容,需要从webapps.dist中拷贝文件到webapps文件夹。下面自行制作镜像:就是从webapps.dist中拷贝文件到webapps文件夹下,并提交该镜像作为一个新的镜像。使得该镜像默认的webapps文件夹下就有文件。具体命令如下:

#1.复制文件夹
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it tomcat /bin/bash
root@2a3bf3eaa2e4:/usr/local/tomcat# cd webapps
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# ls
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# cd ../
root@2a3bf3eaa2e4:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@2a3bf3eaa2e4:/usr/local/tomcat# cd webapps
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED         STATUS         PORTS                    NAMES
2a3bf3eaa2e4   tomcat                "/bin/bash"    4 minutes ago   Up 4 minutes   8080/tcp                 competent_torvalds
7789d4505a00   portainer/portainer   "/portainer"   24 hours ago    Up 24 hours    0.0.0.0:8088->9000/tcp   quirky_sinoussi
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it 2a3bf3eaa2e4 /bin/bash
root@2a3bf3eaa2e4:/usr/local/tomcat# cd webapps
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# cd ../
root@2a3bf3eaa2e4:/usr/local/tomcat# read escape sequence
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED         STATUS         PORTS                    NAMES
2a3bf3eaa2e4   tomcat                "/bin/bash"    8 minutes ago   Up 8 minutes   8080/tcp                 competent_torvalds
7789d4505a00   portainer/portainer   "/portainer"   24 hours ago    Up 24 hours    0.0.0.0:8088->9000/tcp   quirky_sinoussi
#2.提交镜像作为一个新的镜像[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker commit -m="add webapps" -a="Ethan" 2a3bf3eaa2e4 mytomcat:1.0
sha256:f189aac861de51087af5bc88a5f1de02d9574e7ee2d163c647dd7503a2d3982b
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
mytomcat              1.0       f189aac861de   7 seconds ago   653MB
mysql                 5.7       f07dfa83b528   6 days ago      448MB
tomcat                latest    feba8d001e3f   10 days ago     649MB
nginx                 latest    ae2feff98a0c   12 days ago     133MB
centos                latest    300e315adb2f   2 weeks ago     209MB
portainer/portainer   latest    62771b0b9b09   5 months ago    79.1MB
elasticsearch         7.6.2     f29a1ee41030   9 months ago    791MB#3.运行容器[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it mytomcat:1.0 /bin/bash
root@1645774d4605:/usr/local/tomcat# cd webapps
root@1645774d4605:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
wz99sm8v95sckz8bd2c4Z ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
mytomcat              1.0       f189aac861de   7 seconds ago   653MB
mysql                 5.7       f07dfa83b528   6 days ago      448MB
tomcat                latest    feba8d001e3f   10 days ago     649MB
nginx                 latest    ae2feff98a0c   12 days ago     133MB
centos                latest    300e315adb2f   2 weeks ago     209MB
portainer/portainer   latest    62771b0b9b09   5 months ago    79.1MB
elasticsearch         7.6.2     f29a1ee41030   9 months ago    791MB

12. 常用容器部署示例

12.1 Nginx部署

ss(1)搜索并下载镜像:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search nginx
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                              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…   137
jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   123
tiangolo/nginx-rtmp                Docker image with Nginx using the nginx-rtmp…   107                  [OK]
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
6ec7b7d162b2: Already exists
cb420a90068e: Pull complete
2766c0bf2b07: Pull complete
e05167b6a99d: Pull complete
70ac9d795e79: Pull complete
Digest: sha256:4cf620a5c81390ee209398ecc18e5fb9dd0f5155cd82adcbae532fec94006fb9
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images;
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        5.7       f07dfa83b528   5 days ago    448MB
nginx        latest    ae2feff98a0c   11 days ago   133MB
centos       latest    300e315adb2f   2 weeks ago   209MB

ss可以到dockerhub官网查看Nginx的详细版本信息 :https://hub.docker.com/_/nginx
ss(2)运行测试:

docker run -d --name nginx01 -p 3334:80 nginx-d 后台运行
--name 给容器命名
-p 3334:80 将宿主机的端口3334映射到该容器的80端口

ss(3)运行结果:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it nginx01 /bin/bash
Error: No such container: nginx01
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d --name nginx01 -p 3334:80 nginx
20c896637ff5de8be835797109d62ee2465e28d9d716be5a8d550ef7d547fcf5
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
20c896637ff5   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 5 seconds   0.0.0.0:3334->80/tcp   nginx01

ss(4)端口暴露的概念:

ss(5)配置文件,进入容器,自定义配置文件

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it nginx01 /bin/bash
root@20c896637ff5:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@20c896637ff5:/# cd /etc/nginx
root@20c896637ff5:/etc/nginx# ls
conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf
root@20c896637ff5:/# cd /etc/nginx
root@20c896637ff5:/etc/nginx# ls
conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf

ss(6)访问测试,本地主机访问测试,curl命令发起请求,如果使用阿里云服务器需要设置安全组。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
20c896637ff5   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 and
working. 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>

12.2 Tomcat部署

ss(1)下载并运行

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
6c33745f49b4: Pull complete
ef072fc32a84: Pull complete
c0afb8e68e0b: Pull complete
d599c07d28e6: Pull complete
e8a829023b97: Pull complete
d04be46a31d1: Pull complete
db6007c69c35: Pull complete
e4ad4c894bce: Pull complete
248895fda357: Pull complete
277059b4cba2: Pull complete
Digest: sha256:57dae7dfb9b62a413cde65334c8a18893795cac70afc3be589c8336d8244655d
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -p 3335:8080 --name tomcat01 tomcat
7136295a6082cb0f805b025a1471bde02ead4864be3e2c9dcd337b1dde0a3113

ss(2)进入容器:1.容器中的命令是少了 2.阿里云镜像默认下载的是最小的镜像,保证最小的运行环境。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it tomcat01 /bin/bash
root@7136295a6082:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@7136295a6082:/usr/local/tomcat# cd webapps.dist
root@7136295a6082:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@7136295a6082:/usr/local/tomcat/webapps.dist# cd ROOT
root@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT# ls
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
root@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT# cd ../../
root@7136295a6082:/usr/local/tomcat# cd webapps
root@7136295a6082:/usr/local/tomcat/webapps# ls
root@7136295a6082:/usr/local/tomcat/webapps# cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/
root@7136295a6082:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@7136295a6082:/usr/local/tomcat/webapps# exit
exit

ss(3)访问测试

[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>

12.3 ElasticSearch部署

ss添加 ’-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.2
3b8cd4991814896c523ee67b84ce198e32bd82b1a62d512b198138a58ca946f1
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS         PORTS                                            NAMES
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
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker stats

【基于狂神Docker双响曲】:1、Docker入门及常用部署相关推荐

  1. docker build 变量_Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务

    在之前的文章里面介绍了如何基于docker容器部署一些常见的基础环境,例如MySQL.Redis这些,那么这篇文章里面我会介绍一些关于SpringBoot如何打包运行到docker容器中. 先介绍一下 ...

  2. Docker 实战教程之从入门到提高 (五)

    本系列的前四篇文章,我们学习了如何在 Ubuntu 操作系统安装 Docker,并且通过实战练习,了解了 Docker 和宿主机操作系统文件目录互相隔离的实现原理,以及 Docker Volume 的 ...

  3. Docker 实战教程之从入门到提高 (四)

    本系列的前三篇文章,我们学习了如何在 Ubuntu 操作系统安装 Docker,并且通过实战练习,了解了 Docker 和宿主机操作系统文件目录互相隔离的实现原理,以及 Docker Volume 的 ...

  4. Docker 实战教程之从入门到提高(二)

    本系列第一篇文章,Docker 实战教程之从入门到提高 (一),我们已经介绍了如何在 Ubuntu 操作系统中安装 Docker,以及 Proxy 和 Insecure Registry 的配置. 本 ...

  5. Docker系列之.NET Core入门(三)

    在Docker生态系统中除了上一节所讲解的基本概念,还有其他专业术语,本文我们将一笔带过,同时会开始陆续进入到在.NET Core中使用Docker. 专业术语 Docker Engine(Docke ...

  6. Docker 从入门到实践系列四 - Docker 容器编排利器 Docker Compose

    文章目录 Compose简介 概念 组成 安装与卸载 二进制包方式安装 测试 卸载 docker-compose.yml 文件详解 概念 案例 version services image build ...

  7. Docker小白入门教程--docker理解与实战(懵逼三连--Docker是什么,为什么要使用Docker,如何使用Docker?)

    站在巨佬的肩膀上,才能看的更远!(没错这篇文章就是大量援引国内外网上各位大佬的博客,外加我这个小菜初入docker的一些理解,整理一下所学,也是为了方便我自己在暑假过完后,被别人问起docker问到我 ...

  8. docker是什么(快速入门)

    几张图帮你理解 docker 基本原理及快速入门 什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司 ...

  9. Docker 的基本原理及快速入门

    什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linu ...

  10. docker学习笔记(一)docker入门

    目录 基本概念 docker引擎 docker架构 安装docker docker常用命令 Docker 是一个开源的应用容器引擎,它基于 Go 语言 并遵从 Apache2.0 协议开源. Dock ...

最新文章

  1. js 使用 Lawnchair 存储 json 对象到本地
  2. php中控制面板折叠,微信小程序折叠面板的实现方法示例
  3. 【强连通分量】Proving Equivalences
  4. Linux环境多线程编程基础设施
  5. mybatis框架入门程序:演示通过mybatis实现数据库的插入操作中实现返回结果的获取...
  6. 输入10个整数,计算它们的平均值(输出保留1位小数)。
  7. Android设计模式之——工厂方法模式
  8. 解决:Unknown custom element: <myData> - did you register the component correctly? For recursive compon
  9. 一步一步学习Servlet之Session使用
  10. 【ArcGIS|空间分析|网络分析】6 创建路径分析模型
  11. 【COCOS2DX-LUA 脚本开发之十二】利用AssetsManager实现在线更新资源文件
  12. LINUX FFMPEG编译汇总(中等,只编译必要的部分)
  13. PS批量制作获奖证书并导出PNG
  14. 西安计算机专业大专排名及分数线,西安所有的大学名单及排名分数线(本科 专科)...
  15. 【U8+】U8+自动备份不成功BackupDB日志中显示“数据源.未找到”
  16. 制作关于计算机的ppt图片,10步教你制作图片墙PPT封面
  17. Z-001 IVD体外诊断液面探测专题
  18. 采集程序 -【开源项目】
  19. 无人便利店代理的系统用于其他行业是否可以
  20. 《The Man Who Solved The Market》——量化大师西蒙斯新书总结

热门文章

  1. nuc7 android tv,第七代的进化,Intel NUC7i3BNH 开箱评测拆解
  2. 初识FineBI数据分析
  3. Python 正则表达式(RegEx)
  4. 信息学奥赛一本通 1296:开餐馆 | OpenJudge NOI 2.6 6045:开餐馆
  5. 0x0000004e蓝屏代码解决教程
  6. 费纳姆密码-二进制密码
  7. 投入产出表之影响力系数和感应度系数的计算--基于Excel
  8. 【线性代数】6-6:相似矩阵(Similar Matrices)
  9. 多目标蜉蝣优化算法(MOMA)附Matlab代码
  10. Java注解(Annotation)