Docker基础01--入门总结--(狂神说docker学习笔记)

发布时间:2023-03-31 12:00

文章目录

        • Docker学习笔记合集(持续更新)
        • 学习目录
    • 1.Docker概述
      • Docker为什么出现?
    • 2.Docker的历史
      • 聊聊Docker
    • 3.Docker的作用
        • 应用更快速的交付和部署
        • 更便捷的升级和扩缩容
        • 更简单的系统运维
        • 更高效的计算资源利用
    • 4.Docker的基本组成
        • 镜像(image):
        • 容器(container):
        • 仓库(repository):
    • 5.Dockers的安装
    • 6.Docker的卸载
    • 7.配置阿里云镜像加速
    • 8. Docker容器运行流程
    • 9. 底层原理
    • 10. Docker的常用命令
      • 10.1 基础命令
      • 10.2 镜像命令
      • 10.3 容器命令
      • 10.4 其他常用命令
    • 11. 常用容器部署
      • 11.1 Nginx部署
      • 11.2 Tomcat部署
      • 11.3 ElasticSearch部署
    • 12.Docker镜像详解
      • 12.1 什么是镜像
      • 12.2 Docker镜像加载原理
      • 12.3 分层理解
      • 12.4 提交镜像

Docker学习笔记合集(持续更新)

linux入门–服务器购买—宝塔部署环境说明
Nginx简单入门–学习笔记狂神说
Docker基础01–入门总结–(狂神说docker学习笔记)
Docker基础02–Docker容器数据卷详解–(狂神说docker学习笔记)
Docker基础03–Dockerfile详解与镜像发布–(狂神说docker学习笔记)
Docker基础04–Docker网络–(狂神说docker学习笔记)
Docker进阶01–Docker Compose–(狂神说docker学习笔记)

Docker知识点翻阅手册–Docker常用命令、Dockererfile、Compose、网络等整理合集
Docker实战:Mysql、Nginx、web的Docker化部署(安装、自定义镜像、compose管理容器、自定义网络、部署问题及解决)

学习目录

Docker概述
Docker安装
Docker命令–镜像命令 容器命令 操作命令
Docker镜像!
容器数据卷!
DockerFile
Docker网络原理
IDEA整合Docker
Docker Compose
Docker Swarm
CI\\CD Jenkins

1.Docker概述

Docker为什么出现?

一款产品:开发–上线 两套环境!应用环境,应用配置!

开发 — 运维 问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就非常大!

环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop…)

发布一个项目(jar+(Redis、MySQL、jdk、ES))项目能不能都带上环境安装打包!

之前在服务器配置一个应用的环境 Redis、MySQL、jdk、ES、Hadoop,配置越麻烦了,不能够跨平台

windows,最后发布到linux!

传统:开发jar,运维来做

现在:开发打包部署上线,一套流程做完

java - apk --发布(应用商店 ) --张三使用apk --安装即可用!

java - jar(环境) —打包项目带上环境(镜像) --(Docker仓库:商店) —下载我们发布的镜像 --直接运行即可!

Docker给以上的问题,提出了解决方案!

\"img\"

Docker的思想就来自于集装箱!

JRE — 多个应用(端口冲突)—原来都是交叉的!

隔离:Docker核心思想!打包装箱!每个箱子之间是互相隔离的。

水果、生化武器

Docker通过隔离机制,可以将服务器利用到机制!

本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习!

2.Docker的历史

2010年,几个搞IT的年轻人,在美国成立了一家公司 dotCloud

做一些pass的云计算服务!LXC有关的容器技术!

他们将自己的技术(容器化技术)命名 就是 Docker!

Docker刚刚诞生的时候,没有引起行业的注意!

2013年开源–开发源代码!

2014年4月9日,Docker1.0发布!

Docker为什么这么火?十分的轻巧!

在容器技术出来之前,我们都是使用虚拟机技术!

虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或多台电脑!笨重!

虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!

vm,linux centos原生镜像(一个电脑!) 隔离,需要开启多个虚拟机! 几个G  几分钟
docker,隔离,镜像(最核心的环境 4m  + jdk +mysql)十分小巧,运行镜像即可! 几个M KB 秒级

到现在,所有开发人员都必须要回Docker!

聊聊Docker

Docker是基于Go语言开发的!开源项目!

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第1张图片\"

  • 官网

  • 官方文档Docker文档是超详细的

  • 仓库地址

3.Docker的作用

之前的虚拟机技术

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第2张图片\"

虚拟机技术缺点:

1.资源占用很多

2.冗余步骤多

3.启动很慢!

容器化技术

容器化技术不是模拟的一个完整的操作系统

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第3张图片\"

比较Docker和虚拟机技术的不同:

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

  • 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以轻便了

  • 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响

DevOps(开发、运维)

应用更快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像、发布测试、一键运行

更便捷的升级和扩缩容

使用了Docker之后,我们部署应用就和搭积木一样!

(SpringBoot 1.5 Redis 5 tomcat8)打包成一个镜像,扩展 服务器A!服务器B

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的。

更高效的计算资源利用

Docker是 内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致!

4.Docker的基本组成

Docker的基本组成图如下:

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第4张图片\"

说明:

镜像(image):

docker镜像好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===》run==》tomcat01容器(提供服务器)通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)

容器(container):

Docker利用容器技术没独立运行一个或者一个组应用,通过镜像来创建的。

启动、停止、删除,基本命令

仓库(repository):

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第5张图片\"

5.Dockers的安装

查看系统的内核:

uname -r

系统内核版本为3.10.0

[root@zecan ~]# uname -r
3.10.0-1062.18.1.el7.x86_64

查看系统配置

cat /etc/os-release

[root@zecan ~]# 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\"

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

结果:

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第6张图片\"

下载hello-world镜像进行测试

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第7张图片\"

查看下载的hello world镜像

[root@zecan ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   7 weeks ago   13.3kB

6.Docker的卸载

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

7.配置阿里云镜像加速

1)进入阿里云官网,搜索容器镜像服务
\"Docker基础01--入门总结--(狂神说docker学习笔记)_第8张图片\"
(2)依次执行官方的这四条命令

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-\'EOF\'
{
  \"registry-mirrors\": [\"https://axvfsf7e.mirror.aliyuncs.com\"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

8. Docker容器运行流程

启动一个容器,Docker的运行流程如下图:

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第9张图片\"

9. 底层原理

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

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第10张图片\"

Docker为什么比VM Ware快?

1、Docker比虚拟机更少的抽象层

2、docker利用宿主机的内核,VM需要的是Guest OS

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第11张图片\"

Docker新建一个容器的时候,不需要像虚拟机一样重新加载一个操作系统内核,直接利用宿主机的操作系统,而虚拟机是需要加载Guest OS。Docker和VM的对比如下:

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第12张图片\"

注:现GuestOS已全部适用

[

](https://blog.csdn.net/huangjhai/article/details/118854733)

10. Docker的常用命令

10.1 基础命令

docker version   # 显示dicker的版本信息
docker info      # 显示docker的系统信息,包括镜像和容器的数量
docker 命令  --help # 帮助命令

命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/

10.2 镜像命令

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 镜像的id

4.CREATED 镜像的创建时间

5.SIZE 镜像的大小


# 可选参数

-a/--all 列出所有镜像

-q/--quiet 只显示镜像的id

2.docker search 搜索镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             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                   86
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   79
centurylink/mysql                 Image containing mysql. Optimized to be link…   60                   [OK]


#可选参数

Search the Docker Hub for images

Options:
  -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=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10308     [OK]
mariadb   MariaDB is a community-developed fordockerk of MyS…   3819      [OK]

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

指定版本下载

[root@zecan ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
b380bbd43752: Already exists 
f23cbf2ecc5d: Already exists 
30cfc6c29c0a: Already exists 
b38609286cbe: Already exists 
8211d9e66cd6: Already exists 
2313f9eeca4a: Already exists 
7eb487d00da0: Already exists 
a71aacf913e7: Pull complete 
393153c555df: Pull complete 
06628e2290d7: Pull complete 
ff2ab8dac9ac: Pull complete 
Digest: sha256:2db8bfd2656b51ded5d938abcded8d32ec6181a9eae8dfc7ddf87a656ef97e97
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

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)

10.3 容器命令

说明:有了镜像才可以创建容器

docker pull centos

新建容器并启动

docker run [可选参数] image

#参数说明
--name=\"名字\"          指定容器名字  tomcat01 tomcat02,用来区分容器
-d                     后台方式运行
-it                    使用交互方式运行,进入容器查看内容
-p                     指定容器的端口 -p 8080:8080
(
   -p ip:主机端口:容器端口  配置主机端口映射到容器端口
   -p 主机端口:容器端口
   -p 容器端口
)
-P                     随机指定端口(大写的P)

#测试,并启动
[root@zecan ~]# docker run -it centos /bin/bash
[root@b3ac7a30eb8a /]# ls   #查看容器内地centos,基础版本,很多命令都是不完善的!
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#从容器退回主机
[root@b3ac7a30eb8a /]# exit
exit
[root@zecan /]# ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  patch  proc  root  run  sbin  srv  sys  tmp  usr  var  www

列出所有的运行的容器

# docker ps 命令
		# 列出当前正在运行的容器
-a  # 列出当前正在运行的容器+带出历史运行过的容器
-n=# 显示最近创建的容器
-q # 只显示容器的编号

[root@zecan /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@zecan /]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
b3ac7a30eb8a   centos        \"/bin/bash\"   5 minutes ago    Exited (0) 4 minutes ago              optimistic_heyrovsky
332d452d5337   hello-world   \"/hello\"      31 minutes ago   Exited (0) 31 minutes ago             sleepy_mendel
72d42c07133b   hello-world   \"/hello\"      15 hours ago     Exited (0) 15 hours ago               pensive_germain
[root@zecan /]# 

删除容器

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

启动和停止容器

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

10.4 其他常用命令

后台启动容器

#命令 docker run -d 镜像名!
[root@zecan /]# docker run -d centos

#问题docker ps,发现centos停止了

#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

1.查看日志

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --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@zecan /]# docker run -d centos /bin/sh -c \"while true;do echo hi;sleep 5;done\"
88947e8d3cf0fa5bdbd6e0577e77b74b8a53bf4dd6685bd00130829a8c7f2250
[root@zecan /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
88947e8d3cf0   centos    \"/bin/sh -c \'while t…\"   40 seconds ago   Up 39 seconds             loving_tesla
[root@zecan /]# docker logs -tf --tail 10 88947e8d3cf0
2021-11-16T02:39:04.210788277Z hi
2021-11-16T02:39:09.212892789Z hi
2021-11-16T02:39:14.214927123Z hi
2021-11-16T02:39:19.217185096Z hi
2021-11-16T02:39:24.219168601Z hi
2021-11-16T02:39:29.221417267Z hi
2021-11-16T02:39:34.223160841Z hi
2021-11-16T02:39:39.225251841Z hi
2021-11-16T02:39:44.227213547Z hi
2021-11-16T02:39:49.229377746Z hi
2021-11-16T02:39:54.231320967Z hi

2.查看容器中进程信息

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911f
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11156               11135               0                   11:31               ?                   00:00:00            /bin/sh -c while true;do echo hi;sleep 5;done
root                11886               11156               0                   11:43               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5

3.查看容器的元数据

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

4.进入当前正在运行的容器

因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置

方式一:

[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

方式二:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker attach c703b5b1911f

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

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

拷贝容器的文件到主机中

docker cp 容器id:容器内路径 目的主机路径

#启动容器
[root@zecan /]# docker run -it centos /bin/bash
[root@a84d4273434f /]# 
[root@a84d4273434f /]# [root@zecan /]# 
[root@zecan /]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
a84d4273434f   centos    \"/bin/bash\"   2 minutes ago   Up 2 minutes             great_sammet

#进入dockers容器内部
[root@zecan /]# docker attach a84d4273434f
[root@a84d4273434f /]# cd  /home
[root@a84d4273434f home]# touch zecan.txt
[root@a84d4273434f home]# ls
zecan.txt
[root@a84d4273434f home]# exit
exit
[root@zecan /]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                      PORTS     NAMES
a84d4273434f   centos    \"/bin/bash\"   3 minutes ago   Exited (0) 12 seconds ago             great_sammet

# 将文件拷贝出来到主机上
[root@zecan /]# docker cp a84d4273434f:/home/zecan.txt /home
[root@zecan /]# cd /home
[root@zecan home]# ls
redis  www  zecan.txt

# 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现,自动同步

命令小节的图解如下:

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第13张图片\"

可以把常用命令放进来

11. 常用容器部署

11.1 Nginx部署

(1)搜索并下载镜像

[root@zecan home]# 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@zecan home]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
7d63c13d9b9b: Pull complete 
15641ef07d80: Pull complete 
392f7fc44052: Pull complete 
8765c7b04ad8: Pull complete 
8ddffa52b5c7: Pull complete 
353f1054328a: Pull complete 
Digest: sha256:dfef797ddddfc01645503cef9036369f03ae920cac82d344d58b637ee861fda1
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@zecan home]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    04661cdce581   6 days ago     141MB
mysql         latest    ecac195d15af   4 weeks ago    516MB
hello-world   latest    feb5d9fea6a5   7 weeks ago    13.3kB
centos        latest    5d0da3dc9764   2 months ago   231MB

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

(2)运行测试

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

[root@zecan home]# docker run -d --name nginx01 -p 3344:80 nginx 
b4ce6a638ddcf76ad1eb85fe9735a39174860e984bc4cea94beb0dd9ac614d47
[root@zecan home]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
b4ce6a638ddc   nginx     \"/docker-entrypoint.…\"   7 seconds ago   Up 6 seconds   0.0.0.0:3344->80/tcp   nginx01

端口暴露的概念:

\"Docker基础01--入门总结--(狂神说docker学习笔记)_第14张图片\"

外网\\

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

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

[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

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

[root@zecan home]# curl localhost:3344



Welcome to nginx!</ti 
<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 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>
</code></pre> 
  <p><a href=\"https://img.it610.com/image/info8/e263a4739ebb4777a2ed9c8a40d8f79e.png\" target=\"_blank\"><img src=\"https://img.it610.com/image/info8/e263a4739ebb4777a2ed9c8a40d8f79e.png\" alt=\"Docker基础01--入门总结--(狂神说docker学习笔记)_第15张图片\" width=\"466\" height=\"205\" style=\"border:1px solid black;\"></a></p> 
  <h3>11.2 Tomcat部署</h3> 
  <pre><code class=\"prism language-dockerfile\"># 官网的使用  用完即删
docker run -it  --rm  tomcat:9.0
</code></pre> 
  <p><strong>(1)下载并运行</strong></p> 
  <pre><code>docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
</code></pre> 
  <p><strong>(2)访问测试</strong></p> 
  <p><strong>没有问题</strong></p> 
  <p><a href=\"https://img.it610.com/image/info8/599927d9eeba4ca5917d1fed417b4ac1.png\" target=\"_blank\"><img src=\"https://img.it610.com/image/info8/599927d9eeba4ca5917d1fed417b4ac1.png\" alt=\"Docker基础01--入门总结--(狂神说docker学习笔记)_第16张图片\" width=\"420\" height=\"164\" style=\"border:1px solid black;\"></a></p> 
  <p><strong>(3)进入容器</strong></p> 
  <p>docker exec -it tomcat01 /bin/bash</p> 
  <p>1.容器中的命令是少了</p> 
  <p>2.阿里云镜像默认下载的是最小的镜像,保证最小的运行环境。</p> 
  <pre><code class=\"prism language-dockerfile\">[root@zecan home]# docker exec -it tomcat01 /bin/bash
root@7115b1d34558:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@7115b1d34558:/usr/local/tomcat# cd webapps
root@7115b1d34558:/usr/local/tomcat/webapps# ls
root@7115b1d34558:/usr/local/tomcat/webapps# cd..
bash: cd..: command not found
root@7115b1d34558:/usr/local/tomcat/webapps# cd  ..
root@7115b1d34558:/usr/local/tomcat# cd webapps.dist
root@7115b1d34558:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@7115b1d34558:/usr/local/tomcat/webapps# cd  ..
root@7115b1d34558:/usr/local/tomcat# cp -r webapps.dist/*  webapps
root@7115b1d34558:/usr/local/tomcat# cd webapps
root@7115b1d34558:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
</code></pre> 
  <p><a href=\"https://img.it610.com/image/info8/2aed2b4acb25489b86dd8cf34e7ba6c6.jpg\" target=\"_blank\"><img src=\"https://img.it610.com/image/info8/2aed2b4acb25489b86dd8cf34e7ba6c6.jpg\" alt=\"Docker基础01--入门总结--(狂神说docker学习笔记)_第17张图片\" width=\"650\" height=\"597\" style=\"border:1px solid black;\"></a></p> 
  <p>思考问题:我们以后都要部署项目,如果每次都要进入而哦那个其是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps,在外部放置项目,就自动同步到内部就好了!</p> 
  <h3>11.3 ElasticSearch部署</h3> 
  <ul> 
   <li> <p>es 暴露的端口很多!</p> </li> 
   <li> <p>es 十分的耗内存</p> </li> 
   <li> <p>es 的数据一般需要放置到安全目录!挂载</p> </li> 
  </ul> 
  <pre><code class=\"prism language-dockerfile\"># 启动 
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e \"discovery.type=single-node\" elasticsearch:7.6.2

# 启动了 linux就卡死了 docker  stats 查看 cpu的状态

# es是十分耗内存的,1.xG 1核2G

# 测试一下es是否成功
[root@zecan ~]# curl localhost:9200
{
  \"name\" : \"ebccbbe4becc\",
  \"cluster_name\" : \"docker-cluster\",
  \"cluster_uuid\" : \"voYT7LkXQhqtoz8PcDmUbg\",
  \"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\"
}
</code></pre> 
  <p><strong># 增加内存的限制</strong></p> 
  <pre><code class=\"prism language-dockerfile\">#x修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e \"discovery.type=single-node\" -e ES_JAVA_OPTS=\"-Xms128m -Xmx512m\"  elasticsearch:7.6.2

添加 ’-e ES_JAVA_OPTS=\"-Xms128m -Xmx512m\" ‘ 配置ElasticSearch的虚拟机占用的内存大小。
docker stats 查看资源占用情况
</code></pre> 
  <p><a href=\"https://img.it610.com/image/info8/f819465f0d804234a011a6c74b4841bc.png\" target=\"_blank\"><img src=\"https://img.it610.com/image/info8/f819465f0d804234a011a6c74b4841bc.png\" alt=\"img\" width=\"764\" height=\"74\"></a></p> 
  <p>作业:使用kibanna连接es?思考网络如何才能来连接过去。</p> 
  <p><a href=\"https://img.it610.com/image/info8/c4d18e1fa2e145a7a35cae271a5d3820.jpg\" target=\"_blank\"><img src=\"https://img.it610.com/image/info8/c4d18e1fa2e145a7a35cae271a5d3820.jpg\" alt=\"Docker基础01--入门总结--(狂神说docker学习笔记)_第18张图片\" width=\"611\" height=\"307\" style=\"border:1px solid black;\"></a></p> 
  <ol> 
   <li>图形化管理工具Portaniner安装<br> Portaniner是Docker的图形化管理工具,类似的工具还有Rancher(学到CI/CD再用)<br> 下载运行Portaniner镜像并运行,设置本机映射端口为8088<br> docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer<br> -v 挂载</li> 
  </ol> 
  <p>访问测试:外网(阿里云开通外网)<br> 安装教程:https://blog.csdn.net/weixin_44421461/article/details/109475411<br> 第一次登录设置admin用户的密码</p> 
  <p>我们建造的是单机版,直接选择Local,点击连接<br> 如果是阿里云服务器记得设置安全组,选择连接本地的Docker,整体界面预览如下图:</p> 
  <h2>12.Docker镜像详解</h2> 
  <h3>12.1 什么是镜像</h3> 
  <p>镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时(一个程序在运行或者在被执行的依赖)、库,环境变量和配置文件。</p> 
  <p>所有的应用,直接打包docker镜像,就可以直接跑起来<br> 镜像来源有三:<br> ● 仓库下载<br> ● 拷贝<br> ● 自己创造镜像</p> 
  <h3>12.2 Docker镜像加载原理</h3> 
  <p>Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是UnionFS联合文件系统。</p> 
  <h3>12.3 分层理解</h3> 
  <p>查看镜像分层的方式可以通过docker image inspect+镜像 命令!</p> 
  <pre><code class=\"prism language-shell\"><span class=\"token string\">\"RootFS\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token punctuation\">{</span>
<span class=\"token string\">\"Type\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"layers\"</span>,
<span class=\"token string\">\"Layers\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token punctuation\">[</span>
<span class=\"token string\">\"sha256:e8b689711f21f9301c40bf2131ce1a1905c3aa09def1de5ec43cf0adf652576e\"</span>,
<span class=\"token string\">\"sha256:b43651130521eb89ffc3234909373dc42557557b3a6609b9fed183abaa0c4085\"</span>,
<span class=\"token string\">\"sha256:8b9770153666c1eef1bc685abfc407242d31e34f180ad0e36aff1a7feaeb3d9c\"</span>,
<span class=\"token string\">\"sha256:6b01cc47a390133785a4dd0d161de0cb333fe72e541d1618829353410c4facef\"</span>,
<span class=\"token string\">\"sha256:0bd13b42de4de0a0d0cc3f1f162cd0d4b8cb4ee20cbea7302164fdc6894955fd\"</span>,
<span class=\"token string\">\"sha256:146262eb38412d6eb44be1710bfe0f05d3493831f82b1c2be8dc8d9558c9f033\"</span>
<span class=\"token punctuation\">]</span>
</code></pre> 
  <h3>12.4 提交镜像</h3> 
  <p>使用docker commit 命令提交容器成为一个新的版本</p> 
  <p>docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像名:[TAG]</p> 
  <p>由于默认的Tomcat镜像的webapps文件夹中没有任何内容,需要从webapps.dist中拷贝文件到webapps文件夹。下面自行制作镜像:就是从webapps.dist中拷贝文件到webapps文件夹下,并提交该镜像作为一个新的镜像。使得该镜像默认的webapps文件夹下就有文件。具体命令如下:<br> #1.复制文件夹</p> 
  <pre><code class=\"prism language-shell\"><span class=\"token punctuation\">[</span>root@zecan  ~<span class=\"token punctuation\">]</span><span class=\"token comment\"># docker ps </span>
CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                    NAMES
0f8ea2f53e32   tomcat    <span class=\"token string\">\"catalina.sh run\"</span>   <span class=\"token number\">2</span> minutes ago   Up <span class=\"token number\">2</span> minutes   <span class=\"token number\">0.0</span>.0.0:8080-<span class=\"token operator\">></span><span class=\"token number\">8080</span>/tcp   sharp_diffie
<span class=\"token punctuation\">[</span>root@zecan  ~<span class=\"token punctuation\">]</span><span class=\"token comment\"># docker exec -it 0f8ea2f53e32 /bin/bash </span>
root@0f8ea2f53e32:/usr/local/tomcat<span class=\"token comment\"># ls</span>
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@0f8ea2f53e32:/usr/local/tomcat<span class=\"token comment\"># cp -r webapps.dist/* webapps</span>
root@0f8ea2f53e32:/usr/local/tomcat<span class=\"token comment\"># cd webapps</span>
root@0f8ea2f53e32:/usr/local/tomcat/webapps<span class=\"token comment\"># ls</span>
ROOT  docs  examples  host-manager  manager
root@0f8ea2f53e32:/usr/local/tomcat/webapps<span class=\"token comment\">#</span>
</code></pre> 
  <p>#2.提交镜像作为一个新的镜像</p> 
  <pre><code class=\"prism language-shell\"><span class=\"token punctuation\">[</span>root@zecan  ~<span class=\"token punctuation\">]</span><span class=\"token comment\"># docker commit -a=\"zecan\" -m=\"add webapps app\" 0f8ea2f53e32 tomcat02:1.0 </span>
sha256:ad1fdd24828b785a5d4abcb980d19178e1c30123b4ce588c4225a0fbfaf4ad40
<span class=\"token punctuation\">[</span>root@zecan  ~<span class=\"token punctuation\">]</span><span class=\"token comment\"># docker images </span>
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
tomcat02              <span class=\"token number\">1.0</span>       ad1fdd24828b   <span class=\"token number\">15</span> seconds ago   684MB
tomcat                latest    5db6fed793e9   <span class=\"token number\">12</span> hours ago     680MB
nginx                 latest    04661cdce581   <span class=\"token number\">6</span> days ago       141MB
mysql                 latest    ecac195d15af   <span class=\"token number\">4</span> weeks ago      516MB
redis                 latest    7faaec683238   <span class=\"token number\">4</span> weeks ago      113MB
hello-world           latest    feb5d9fea6a5   <span class=\"token number\">7</span> weeks ago      <span class=\"token number\">13</span>.3kB
centos                latest    5d0da3dc9764   <span class=\"token number\">2</span> months ago     231MB
portainer/portainer   latest    580c0e4e98b0   <span class=\"token number\">8</span> months ago     <span class=\"token number\">79</span>.1MB
elasticsearch         <span class=\"token number\">7.6</span>.2     f29a1ee41030   <span class=\"token number\">20</span> months ago    791MB
</code></pre> 
  <p>#3.运行容器</p> 
  <pre><code class=\"prism language-shell\"><span class=\"token punctuation\">[</span>root@iZwz99sm8v95sckz8bd2c4Z ~<span class=\"token punctuation\">]</span><span class=\"token comment\"># docker run -it mytomcat:1.0 /bin/bash</span>
root@1645774d4605:/usr/local/tomcat<span class=\"token comment\"># cd webapps</span>
root@1645774d4605:/usr/local/tomcat/webapps<span class=\"token comment\"># ls</span>
ROOT  docs  examples  host-manager  manager
wz99sm8v95sckz8bd2c4Z ~<span class=\"token punctuation\">]</span><span class=\"token comment\"># docker images</span>
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
mytomcat              <span class=\"token number\">1.0</span>       f189aac861de   <span class=\"token number\">7</span> seconds ago   653MB
mysql                 <span class=\"token number\">5.7</span>       f07dfa83b528   <span class=\"token number\">6</span> days ago      448MB
tomcat                latest    feba8d001e3f   <span class=\"token number\">10</span> days ago     649MB
nginx                 latest    ae2feff98a0c   <span class=\"token number\">12</span> days ago     133MB
centos                latest    300e315adb2f   <span class=\"token number\">2</span> weeks ago     209MB
portainer/portainer   latest    62771b0b9b09   <span class=\"token number\">5</span> months ago    <span class=\"token number\">79</span>.1MB
elasticsearch         <span class=\"token number\">7.6</span>.2     f29a1ee41030   <span class=\"token number\">9</span> months ago    791MB
</code></pre> 
  <p>学习过程搜索:<br> docker run容器的时候/bin/bash到底在表达什么<br> Linux下“/”和“~”的区别<br> 端口冲突(Address already in use)解决方法<br> linux如何查看端口占用情况</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>                </div>
            </div>
            <div class="col-xs-12 col-lg-3 list1">
                <h3 class="h4 relate-title">相关推荐</h3>

                                <p><a href="/show/1/6354.html">Map根据值获取key</a></p>
                                <p><a href="/show/1/3319.html">Python项目实战(一)《Python编程 从入门到实践》</a></p>
                                <p><a href="/show/1/8921.html">react基础05--react-router 路由</a></p>
                                <p><a href="/show/1/10578.html">C#请求HTTPS地址的故障分析和TLS知识点总结</a></p>
                                <p><a href="/show/1/6841.html">深度网络设计技巧(五)之VAN:Visual Attention Network#超越Swin的纯CNN#</a></p>
                                <p><a href="/show/1/3397.html">mysql spring 事务_spring事务及声明式事务的使用方法</a></p>
                                <p><a href="/show/1/11800.html">AVFoundation 入门</a></p>
                                <p><a href="/show/1/5899.html">一图看懂 | 腾讯云原生安全“3+1”重保防护体系</a></p>
                                <p><a href="/show/1/19921.html">浅谈Vue3中watchEffect的具体用法</a></p>
                                <p><a href="/show/1/7880.html">JAVA面试八股文【全网最全】</a></p>
                                <p><a href="/show/1/3530.html">深入学习Linux摄像头(一)v4l2应用编程</a></p>
                                <p><a href="/show/1/8940.html">Python-OpenCV-图像通过透视变换矫正</a></p>
                                <p><a href="/show/1/7395.html">Go语言之嵌入类型详解</a></p>
                                <p><a href="/show/1/15098.html">全国大学生数学建模竞赛(CUMCM)历年试题(查看超级方便)</a></p>
                                <p><a href="/show/1/13202.html">MySQL数据库中的删除命令:delete、truncate、drop</a></p>
                                <p><a href="/show/1/4980.html">[React] vite2 + react17 + ts4 项目初始化遇到的问题解决</a></p>
                                <p><a href="/show/1/7311.html">构造简单模型计算机,计算机原理实验四 CPU与简单模型机设计实验 操作步骤</a></p>
                                <p><a href="/show/1/16086.html">SPI总线(同步)</a></p>
                                <p><a href="/show/1/8764.html">TypeScript 详解</a></p>
                                <p><a href="/show/1/4157.html">[深度学习学习笔记]注意力机制-Attentional mechanism</a></p>
                            </div>
        </div>
    </div>


            <div class="container text-center" style="padding-top: 15px;">
                <p>
                    <a href="/">ItVuer</a> - <a href="#">免责声明</a> - <a href="#">关于我们</a> - <a href="mailto:561261067@qq.com">联系我们</a>
                </p>
                <p>本网站信息来源于互联网,如有侵权请联系:561261067@qq.com</p>
                <p><a href="https://beian.miit.gov.cn/" target="_blank">桂ICP备16001015号</a></p>
            </div>
        </div>
    </div>
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="/static/js/jquery.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="/static/bootstrap-3.4.1/js/bootstrap.min.js"></script>    
    <script type="text/javascript">
        $('img').attr("src",'/static/1.jpg').attr('height','1').css('border','0');
        // function imgError() {
        //     $('img').error(function(){
        //         $(this).attr('src', "/static/1.jpg");
        //     });
        //     console.log('imgError');
        // }
        // imgError();
        // setTimeout(imgError, 2000);
    </script>
</body>
</html>