Docker容器化技术实战操作汇总(附开发环境搭建)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: docker是什么: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker 概述

  • docker是什么: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

官网https://www.docker.com/

在这里插入图片描述

容器化技术

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

在这里插入图片描述
比较Docker和虚拟机技术的不同:

  • 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
  • 容器内的应用直接运行在宿主机的内容,容器是没有自已的内核的,也没有虚拟我们的硬件,所以就轻便了。
  • 每个容器间是互相隔离,每个容器都有一个属于自已的文件系统,互不影响。

Docker的优点

应用更快速的交付和部署

  • 传统:一堆帮助文档,安装程序
  • Docker:打包镜像发布测试,一键运行

更便捷的升级和扩缩容

  • 使用了Doker之后,我们的部署应用就和搭积木一样!
  • 项目打包为一个镜像,扩展 服务器 A!服务器 B

更简单的系统运维

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

更高效的计算资源利用

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

Docker的基本组成

在这里插入图片描述

镜像(image):

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

容器(container):

  • Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
  • 启动,停止,删除,基本命令!
  • 目前就可以把这个容器理解为就是一个简易的linux系统

仓库(repository):

  • 仓库就是存放镜像的地方!
  • 仓库分为公有仓库和私有仓库!
  • Docker Hub(默认是国外的)
  • 阿里云.....都有容器服务器(配置镜像加速!)

下载安装 Docker

在这里插入图片描述

  • 本文中的所有命令都是 root 用户来操作的,若是其他用户记得加上 sudo

环境检查

环境查看命令

uname  -r

我们这里选用的系统内核应该是 3.10 以上的

在这里插入图片描述
系统版本命令

cat /etc/os-release

在这里插入图片描述

下载安装

在这里插入图片描述

  1. 卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

rm -rf /etc/systemd/system/docker.service.d

rm -rf /var/lib/docker

rm -rf /var/run/docker

在这里插入图片描述

  1. 下载docker安装包
yum install -y yum-utils

在这里插入图片描述

  1. 设置镜像仓库,docker默认是国外的仓库
#阿里云镜像地址
yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

在这里插入图片描述

  1. 更新yum软件包索引
yum makecache fast

在这里插入图片描述

  1. 安装docker (docker-ce社区版 dcoker-ee企业版)
yum install docker-ce docker-ce-cli containerd.io
  • 中间会有几个提示不用管输入 y 就可以了。

在这里插入图片描述

在这里插入图片描述

  1. 查看已安装的docker信息
docker version

在这里插入图片描述

  1. 启动docker服务
systemctl start docker
  • ps -ef|grep docker 用于查看进程

在这里插入图片描述

  1. hello world!
docker run hello-world

在这里插入图片描述

  1. 查看一下下载的这个 hello-world 镜像
docker images

在这里插入图片描述

卸载 Docker

#1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

#2.删除资源
 sudo rm -rf /var/lib/docker
 sudo rm -rf /var/lib/containerd
 
 #/var/lib/docker 的默认工作路径
  • 卸载还是很容易的大家了解就可以了,在这就不进行演示了。

配置阿里云镜像加速

  1. 登录阿里云找到阿里云控制台首页,搜索镜像点击容器镜像服务。

在这里插入图片描述

  1. 进入之后点击镜像中心目录下的镜像加速器,选择对应的服务器版本拷贝其配置并执行

在这里插入图片描述

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

在这里插入图片描述

  • 没有报错就说明配置完成喽~

底层原理

回顾我们安装好执行的 helloWord

在这里插入图片描述

请添加图片描述

Docker 是怎么工作的?

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

请添加图片描述

Docker 为什么比VM快?

  1. Docker有着比虚拟机更少的抽象层。
  2. Docker利用的是宿主机的内核,vm需要是Guest OS。

请添加图片描述

所以说,新建一个容器的时候,docker不需要向虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而docker是利用 宿主机的操作系统,省略了这个复杂的过程,秒级!


Docker的常用命令

在这里插入图片描述

帮助命令

  • 万能的帮助命令
docker 命令 --help

Dcoker 版本信息查看

  • 显示docker的版本信息,最好是启动 docker 服务后查看
docker version

在这里插入图片描述

Dcoker 系统信息查看

  • 显示docker的系统信息,包括镜像和容器的数量
docker info

在这里插入图片描述

镜像命令

镜像查看

  • 查看所有本地的主机上的镜像
docker images

在这里插入图片描述

这些列都是什么意思呢?不急下面我们逐一说明。

  1. REPOSITORY 镜像的仓库源
  2. TAG 镜像的标签
  3. IMAGE ID 镜像的id
  4. CREATED 镜像的创建时间
  5. SIZE 镜像的大小

这个命令还有两个常用可选项

  • -a 列出所有镜像

在这里插入图片描述

  • -q 值显示镜像的id

在这里插入图片描述

镜像搜索

  • 这个命令用于从Docker Hub查找镜像。
docker search 镜像名称

在这里插入图片描述
可选项,通过搜索来过滤

  • --filter=STARS=3000 搜索处理的镜像就是STARS (STARS相当于使用量) 大于3000

在这里插入图片描述

下载镜像

  • 从Docker Hub下载镜像到本地。
docker pull 镜像名[:tag]
  • 注意:tag是指定的版本,如果不写tag默认就是 latest(最新版)

在这里插入图片描述这里说明一下,docker是分层下载镜像的后面将可以看到这样做的好处。

  • Digest 签名
  • docker.io/library/mysql:latest 真实地址

指定版本下载

在这里插入图片描述这样看来分层的好处就显而易见了吧。docker会自动避免重复下载

删除镜像

  • 删除指定镜像
docker rmi -f 镜像id
  • 删除多个镜像
docker rmi -r 镜像id1 镜像id2 镜像id3
docker rmi -r $(docker images -aq)

删除时最好通过id来删除保证唯一。这里演示一个就可以了,大家下去自行尝试吧 ~

在这里插入图片描述

容器命令

  • 注意,我们要先有了镜像才可以创建容器。

新建容器并启动

docker run [可选参数] 镜像名

参数说明

  • --name="Name" 容器名字 tomcat01 tomcat02 用来区分容器
  • -d 后台方式运行
  • -it 使用交互方式运行,进入容器内查看内容
  • -p 指定容器的端口 -p 8080:8080

在这里插入图片描述

从容器退回主机

  • 直接容器停止并退出
exit

在这里插入图片描述

  • 容器不停止退出
ctrl + p + q

列出所有运行中的容器

  • 列出当前正在运行的容器
docker ps

可选参数

  • -a 列出当前正在运行的容器+历史运行过的容器
  • -n=1 显示最近创建的一个容器
  • -q 只显示容器的编号

在这里插入图片描述
可以看到现在没有在运行的容器,下面我们加上-a参数查看一下历史运行过的容器。

在这里插入图片描述

删除容器

  • 删除指定的容器,不能删除正在运行的容器
docker rm 容器id

在这里插入图片描述

  • 强制删除指定的容器,加上 -f 参数即可
docker rm -f 容器id
  • 删除所有的容器
docker rm -f $(docker ps -aq)

这里只演示了,根据id号删除指定(hello world)容器!

启动容器

  • 后台启动容器,没有则创建
docker run -d 容器名|容器id

在这里插入图片描述

注意:docekr ps 发现容器停止了

说明:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止。

  • 启动运行过的容器,需要先查看容器的id在根据id启动一个容器。
docker start 容器id

在这里插入图片描述

  • 重启容器,和启动容器方法基本一致。
docker restart 容器id

在这里插入图片描述

停止容器

  • 停止当前正在运行中的容器
docker stop 容器id

在这里插入图片描述

  • 强制停止当前容器
docker kill 容器id

在这里插入图片描述

其他命令

查看日志

docker logs -tf --tail 10 容器id

可选参数

  • -tf 显示日志
  • --tail number 显示日志条数

查看容器中进程信息

docker top 容器id

在这里插入图片描述

查看镜像的元数据

docker inspect 容器id

在这里插入图片描述

进入当前正在运行的容器

  • 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

第一种

docker exec -it 容器id /bin/bash
  • docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)

请添加图片描述

第二种

docker attach 容器id
  • docker attach 进入容器正在执行的终端,不会启动新的进程请添加图片描述

从容器内拷贝文件到主机上

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

在这里插入图片描述


容器数据卷

在这里插入图片描述

什么是数据容器卷?

  • docker的理念回顾。将应用和环境打包成一个镜像!
  • 数据都在容器中,如果我们删除容器,数据就会丢失!需求:数据可以持久化,mysql数据可以存储在本地。
  • 容器之间可以有一个数据共享技术,docker容器中产生的数据,同步到本地!
  • 这就是卷技术!目录的挂载,将我们容器内的目录,挂载到linux上面。

在这里插入图片描述

总结一句话:容器的持久化和同步操作,容器间也是可以数据共享的!

使用容器数据卷

  • 使用命令来进行挂载
docker run -dit -v 主机目录:容器内目录

在这里插入图片描述
启动成功后可以使用docker inspect 容器id 命令查看详细信息

在这里插入图片描述
测试文件的同步,我们现在宿主机上创建test.java文件

在这里插入图片描述
然后我们进入容器内查看文件是否存在

在这里插入图片描述

再次测试,停止容器,在宿主机上修改文件,启动容器,容器内的数据依旧是同步的

请添加图片描述
好处:我们以后修改只需要在本地修改即可,容器内会自动同步!

具名挂载匿名挂载

  1. 匿名挂载
docker run -d -P --name nginx01 -v /ect/nginx nginx

在这里插入图片描述

  • 查看所有的volume的情况
docker volume ls

在这里插入图片描述

这个就是匿名挂载,我们在 -v 后只写了容器内的路径,没有写容器外的路径!

  1. 具名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

在这里插入图片描述
查看所有的volume的情况

在这里插入图片描述
具名挂载,通过 -v 卷名:容器内路径

  • 查看卷

在这里插入图片描述所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxx/_data

我们通过具名挂载可以方便的找到我们的一个卷,大多数情况下使用 具名挂载

如何确定是具名挂载还是匿名挂载,还是指定路径挂载?
  • -v 容器内路径 匿名挂载
  • -v 卷名:容器内路径 具名挂载
  • -v /宿主机路径:容器内路径 指定路径挂载
  1. 拓展

通过 -v 容器内路径:ro rw 改变读写权限

  • ro(readonly) 只读,只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作的。
  • rw(readwrite) 可读可写。

一旦设置了容器权限,容器对我们挂载出来的内容就有了限定

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

初识Dockerfile

  • Dockerfile 就是用来构建 docker 镜像的构建文件!命令脚本!先体验一下!
  • 通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层。

数据卷容器

  • 多个mysql同步数据

在这里插入图片描述

DockerFile

  • DcokerFile介绍

dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

  1. 编写一个dockerfile文件
  2. docker build 构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub,阿里云镜像仓库)

我们来看一下官方是怎么做的

请添加图片描述

请添加图片描述

DockerFile构建过程

基础知识

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行从上到下顺序执行
  3. 表示注释

  4. 每一个指令都会创建一个新的镜像层,并提交。

请添加图片描述

  • dockerfile 是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!Docker镜像逐渐成为企业交付的标准,必须要掌握!
  • 步骤:开发,部署,运维。。。缺一不可
  • DockerFile:构建文件,定义了一切的步骤,源代码
  • DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品
  • Docker容器:容器就是镜像运行起来提供服务的

DockerFile指令

  • 以前的话我们都是使用别人的,现在我们知道了这些指令后,我们来练习自已写一个镜像!
指令 说明
FROM 基础镜像,一切从这里开始构建
MAINTAINER 镜像是谁写的,姓名+邮箱
RUN 镜像构建的时候需要运行的命令
ADD 添加内容
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOSE 保留端口配置
CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD 当构建一个被继承DockerFile 这个时候就会运行ONBUILD的指令。触发指令。
COPY 类似ADD,将我们文件拷贝到镜像中
ENV 构建的时候设置环境变量!

CMD 和 ENTRYPOINT 区别

  • CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
# 编写dockerfile 文件
[root@iZ8vbjbtw24uc8kaw16kvsZ dockerfile]# vim centostest
FROM centos
CMD ["ls","-a"]

# 构建镜像
[root@iZ8vbjbtw24uc8kaw16kvsZ dockerfile]# docker build -f centostest -t cmdtest .

# run运行,发现我们的ls -a命令生效
[root@iZ8vbjbtw24uc8kaw16kvsZ dockerfile]# docker run ccf40f4cce18
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

# 想追加一个命令 -l ls -al
[root@iZ8vbjbtw24uc8kaw16kvsZ dockerfile]# docker run ccf40f4cce18 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled 

# cmd的情况下 -l 替换了CMD["ls","-a"]命令,-l 不是命令所以报错!
  • ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令
# 编写dockerfile 文件
[root@iZ8vbjbtw24uc8kaw16kvsZ dockerfile]# vim dockerfile-cmd-entory
FROM centos
ENTRYPOINT ["ls","-a"]

# 构建镜像
[root@iZ8vbjbtw24uc8kaw16kvsZ dockerfile]# docker build -f dockerfile-cmd-entory -t dockeren .

# 我们的追加命令,是直接拼接在我们的 ENTRYPOINT 命令的后面!
[root@iZ8vbjbtw24uc8kaw16kvsZ dockerfile]# docker run ffdaffe72ed2 -l
total 56
drwxr-xr-x  1 root root 4096 Mar 31 01:06 .
drwxr-xr-x  1 root root 4096 Mar 31 01:06 ..
-rwxr-xr-x  1 root root    0 Mar 31 01:06 .dockerenv
lrwxrwxrwx  1 root root    7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x  5 root root  340 Mar 31 01:06 dev
drwxr-xr-x  1 root root 4096 Mar 31 01:06 etc
drwxr-xr-x  2 root root 4096 Nov  3 15:22 home
lrwxrwxrwx  1 root root    7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx  1 root root    9 Nov  3 15:22 lib64 -> usr/lib64
drwx------  2 root root 4096 Dec  4 17:37 lost+found
drwxr-xr-x  2 root root 4096 Nov  3 15:22 media
drwxr-xr-x  2 root root 4096 Nov  3 15:22 mnt
drwxr-xr-x  2 root root 4096 Nov  3 15:22 opt
dr-xr-xr-x 96 root root    0 Mar 31 01:06 proc
dr-xr-x---  2 root root 4096 Dec  4 17:37 root
drwxr-xr-x 11 root root 4096 Dec  4 17:37 run
lrwxrwxrwx  1 root root    8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x  2 root root 4096 Nov  3 15:22 srv
dr-xr-xr-x 13 root root    0 Mar 29 05:51 sys
drwxrwxrwt  7 root root 4096 Dec  4 17:37 tmp
drwxr-xr-x 12 root root 4096 Dec  4 17:37 usr
drwxr-xr-x 20 root root 4096 Dec  4 17:37 var

Dockerfile中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比他们然后进行测试效果!

DockerFile实战测试

  • Docker Hub 中99%镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行构建

请添加图片描述
创建一个自已的centos

  1. 编写Dockerfile的文件
FROM centos # 基础镜像

MAINTAINER yl<1903838739@qq.com> # 作者和邮箱

ENV MYPATH /usr/local # 设置环境变量
WORKDIR $MYPATH # 设置工作目录

#下载相关依赖,默认下载的centos镜像是不支持vim和ifconfig指令的,下载了这两个依赖就可以运行vim和ifconfig指令
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80 # 暴露端口

CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash # 容器启动时进入/bin/bash目录
  1. 通过这个文件构建镜像
docker build -f dockerfile文件路径 -t 镜像名:[tag]

在这里插入图片描述

docker build -f mycentos -t mzccentos:0.1 .

  • mycentos 是文件名,如果不在文件所在文件夹路径下就要写全路径,mzccentos是自己的镜像名,0.1是版本号,注意后面还有个.不能省略。
  1. 测试运行
docker run -it mzccentos:0.1

在这里插入图片描述

到这我们自已手写的dockerfile就运行起来了。

列出本地进行的变更历史

docker history 容器id

在这里插入图片描述


发布自已的镜像

在这里插入图片描述

发布到Dcoker Hub

  1. 前往Docker Hub官网注册账号确保可以登录

官网:https://registry.hub.docker.com/

在这里插入图片描述

  1. 通过命令行登录我们的DockerHub
docker login -u用户名  回车后输入密码

在这里插入图片描述

  1. 修改镜像名称(命名规则 DockerHub用户名/镜像名:版本号

在这里插入图片描述
注意:如果不修改后续push时可能会出现异常

  1. 在我们服务器上提交自已的镜像
docker push 镜像名

在这里插入图片描述

  1. 前往Docker Hub 查看

在这里插入图片描述

发布到阿里云

  1. 登录阿里云并搜索容器镜像服务

在这里插入图片描述

  1. 创建命名空间

请添加图片描述

  1. 创建容器镜像

请添加图片描述

  1. 浏览阿里云

在这里插入图片描述

  1. 推送
#登录阿里云
docker login --username=周周class registry.cn-zhangjiakou.aliyuncs.com
#修改镜像名
docker tag [ImageId] registry.cn-zhangjiakou.aliyuncs.com/mzcck/mzc-java:[镜像版本号]
#推送镜像到阿里云
docker push registry.cn-zhangjiakou.aliyuncs.co![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/0aff9396e9b14d16a9c79efbd67da54c.png)
m/mzcck/mzc-java:[镜像版本号]

请添加图片描述
请添加图片描述


开发必备(重要)

  • 现在我们来清空docker上所有镜像并重新安装Java开发所需的环境。
docker rmi -f $(docker images -q)
docker rm -f $(docker ps -aq)

一.安装MySQL

  • 这里我们演示Docker安装MySQL 5.7并挂载数据及配置文件
  1. 获取镜像
docker pull mysql:5.7

在这里插入图片描述

  1. 数据挂载,配置密码,并运行容器
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7

参数解释:-d 后台运行 -p 端口映射 -v 挂载卷 -e 环境配置 --name 容器名称

在这里插入图片描述

  1. 通过本地Navicat工具连接MySQL

在这里插入图片描述

  1. 新建数据库测试挂载是否有问题

在这里插入图片描述
在这里插入图片描述

  • 新建后发现,我们挂载到本地的data目录下已经有了最新创建的数据库信息,即使删除镜像我们挂载到本地的数据库卷依旧不会丢失,这就实现了容器数据持久化功能!

二.安装Redis

  • Docker安装redis,挂载外部配置和数据
  1. 从dockerHub拉取镜像到本地
docker pull redis

在这里插入图片描述

  1. 创建目录(宿主机)

配置文件目录(在该目录下放置 redis.conf配置文件,目录可以自定义)

mkdir -p /home/redis/conf

数据目录

mkdir -p /home/redis/data

在这里插入图片描述

  1. 启动容器,加载配置文件并持久化数据
docker run -d --privileged=true -p 6379:6379 --restart always -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data --name myredis redis redis-server /etc/redis/redis.conf --appendonly yes

参数解释:

  • -d 以守护进程的方式启动容器
  • --privileged=true 提升容器内权限
  • -p 6379:6379 绑定宿主机端口
  • --restart always 开机启动
  • -v /home/redis/conf/redis.conf 映射配置文件
  • -v /home/redis/data 映射数据目录
  • --name myredis 指定容器名称
  • --appendonly yes 开启数据持久化

在这里插入图片描述

  1. 使用redis客户端连接测试(redis没有设置用户名和密码,直接通过ip与端口即可连接)

在这里插入图片描述

  1. 添加数据测试挂载是否生效

在这里插入图片描述
在这里插入图片描述

到此,我们的redis安装挂载也没问题了

三.安装Nginx

  • Docker安装 nginx并挂载宿主机目录到容器中
  1. 下载 nginx 镜像(这里直接拉最新版,大家可以根据需要下载对应的版本)
docker pull nginx

在这里插入图片描述

  1. 在宿主机创建挂载目录

日志目录

mkdir /home/nginx/log

配置文件目录

mkdir /home/nginx/conf

项目位置

mkdir /home/nginx/html

在这里插入图片描述

  1. 启动镜像并完成对应的挂载与配置
docker run --name mynginx -d -p 80:80 -v /home/nginx/log:/var/log/nginx -v /home/nginx/conf.d:/etc/nginx/conf.d -v /home/nginx/html:/usr/share/nginx/html nginx

在这里插入图片描述

注意:这里虽然启动成功了但是少挂载了 nginx.conf 配置文件,因为直接挂载会报错所以我们按照下方操作来

  1. 上面容器启动成功后我们先进入容器docker exec -it 容器id /bin/bash
  2. 进入容器后找到 nginx.conf文件的位置。cd /etc/nginx,注意查看文件是否存在。
  3. 退出容器 exit

在这里插入图片描述

  1. 进入我们宿主机(本地)创建的conf目录 cd /home/nginx/conf
  2. 将容器内的 nginx.conf 文件拷贝到我们本地的文件夹中 docker cp 容器id:/etc/nginx/nginx.conf .

在这里插入图片描述

  1. 完成上述操作后,吧之前启动的nginx容器删除 docker rm -f 容器id

在这里插入图片描述

  1. 执行下面命令重启容器 👇
docker run --name mynginx -d -p 80:80 -v /home/nginx/log:/var/log/nginx -v /home/nginx/conf.d:/etc/nginx/conf.d -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/usr/share/nginx/html nginx

参数解释:

  • -d 以守护进程的方式启动容器
  • --name myredis 指定容器名称
  • -p 80:80 绑定宿主机端口

在这里插入图片描述
到此我们 nginx挂载并运行已经完成了

四.安装Tomcat

  1. 下载tomcat镜像,这里依旧采用最新版
docker pull tomcat
  1. 启动镜像
docker run --name tomcat -itd --privileged=true --rm -v /home/tomcat/webapp:/usr/local/tomcat/webapps/webapp -p 8080:8080 tomcat

参数说明:

  • --name tomcat 创建容器名称为tomcat
  • --privileged=true 允许镜像挂载映射本地目录
  • -p 8081:8080 端口映射
  • -v 数据卷挂载
  • -itd 以后台守护进程启动容器
  • tomcat tomcat镜像名

在这里插入图片描述

我们访问测试发现报404

在这里插入图片描述
让我们进入容器中一探究竟

docker exec -it 容器id /bin/bash

在这里插入图片描述

进来后我们发现webapp下没有东西。阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除掉,保证最小可运行的环境。

  • 解决方案:
cp -r webapps.dist/* webapps

在这里插入图片描述

  • 再次测试:

在这里插入图片描述

  • 大功告成。

  • 好了到此整个Docker基础操作就总结完成了,整理不易,看完别忘了一键三连加关注哦
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
6天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
28 2
|
6天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
8天前
|
运维 持续交付 Docker
深入理解Docker容器化技术
深入理解Docker容器化技术
|
4天前
|
安全 持续交付 云计算
揭秘云计算中的容器化技术及其优势
揭秘云计算中的容器化技术及其优势
10 1
|
5天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
6天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
6天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
7天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
8天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
8天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践