首页 > 其他分享 >Docker

Docker

时间:2023-06-11 19:55:05浏览次数:37  
标签:kuangshen tomcat 容器 镜像 Docker docker

Docker概述

1.Docker出现

开发-上线 两套环境

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

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

2.Docker历史

开源 基于Go语言
官网: https://www.docker.com/
文档:https://docs.docker.com/

3.Docker能干嘛

应用更快捷的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更便携的升级和扩缩容
使用Docker之后,部署应用就和搭积木一样!
项目打包一个镜像,扩展 服务器A 服务器B
更简单的系统运维
在容器化之后,我们的开发,测试环境是高度一致的。
更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个虚拟机上运行很多的容器实例!服务器的性能可以被压榨到极致。

4.安装Docker

1丶 官网安装参考手册:https://docs.docker.com/engine/install/centos/

2丶 yum安装gcc相关环境(需要确保 虚拟机可以上外网 )

 yum -y install gcc
 yum -y install gcc-c++

3丶 卸载旧版本

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

4丶安装需要的软件包
yum install -y yum-utils

5丶设置镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6丶安装最新docker

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

7丶 更新yum软件包索引

 yum makecache fast

8丶启动docker

 systemctl start docker

9丶测试命令

docker version
docker run hello-world
docker images

10丶卸载

systemctl stop docker
yum -y remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker

5.阿里云镜像加速


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

6.Docker的常用命令

6.1帮助命令

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

6.2 镜像命令

docker images 列出本地主机上的镜像

docker search 搜索镜像

docker pull 下载镜像

docker pull mysql #默认下载最新
docker pull mysql:5.7 #指定版本下载

docker rmi 删除镜像

docker rmi -f 镜像id # 删除单个
docker rmi -f 镜像名:tag 镜像名:tag # 删除多个
docker rmi -f $(docker images -qa) # 删除全部

6.3 容器命令

说明:有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos

 docker pull centos

新建容器并启动

docker run -it centos /bin/bash #启动centos
ls #查看容器内的centos
exit #从容器退回主机
docker ps #查看运行的容器
docker ps -a #列出所有的容器(当前+历史运行)

退出容器

exit #容器停止并退出
Ctrl+P+Q #容器不停止退出

删除容器

docker rm 容器id #删除指定容器
docker rm -f $(docker ps -a -q) #删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器

启动和停止容器的操作

docker start 容器id #启动容器
docker restart 容器id #重庆容器
docker stop 容器id #停止容器
docker kill 容器id #强制停止容器

6.4 常用其他命令

后台启动容器

docker run -d centos #docker run -d 镜像名

查看日志

 docker logs -f -t --tail 容器id

查看容器中运行的进程信息,支持 ps 命令参数

 docker top 容器id

查看容器/镜像的元数据

 docker inspect 容器id

进入正在运行的容器

 docker exec -it 容器id  /bin/bash # 进入容器开启一个新的终端,可以在里面操作(常用)
docker attach 容器id #进入容器正在执行的终端,不会启动新的进程!

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

 docker cp 容器id:容器内路径 目的主机路径
 例如:docker cp c8530dbbe3b4:/home/f1 /home

安装 elasticsearch

docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag

7 练习

7.1 安装tomcat

# 官方文档解释
# -it :交互模式
# --rm:容器启动成功并退出以后容器就自动移除,一般在测试情况下使用!
docker run -it --rm tomcat:9.0
# 1、下载tomcat镜像
docker pull tomcat
# 2、启动
docker run -d -p 8080:8080 --name tomcat9 tomcat
# 3、进入tomcat
docker exec -it tomcat9 /bin/bash

7.2 安装elasticsearch

# 我们启动es这种容器需要考虑几个问题
1、端口暴露问题 9200、9300
2、数据卷的挂载问题 data、plugins、conf
3、吃内存 - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# 扩展命令
docker stats 容器id # 查看容器的cpu内存和网络状态
# 1、启动es测试
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
# 3、测试访问
[root@kuangshen data]# curl localhost:9200
#
4、增加上内存限制启动
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

7.3 可视化

介绍

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷
的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和
服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管
理的全部需求。
如果仅有一个docker宿主机,则可使用单机版运行,Portainer单机版运行十分简单,只需要一条语句即
可启动容器,来管理该机器上的docker镜像、容器等数据。

docker run -d -p 8088:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

7.Docker镜像讲解

7.1镜像是什么

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

7.2Docker镜像加载原理

UnionFS (联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,
它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系
统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基
础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件
系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker镜像加载原理

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

bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启
动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是
一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已
由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标
准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

对于一个精简的OS,rootfs 可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直
接用Host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版, bootfs基本是一
致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。

7.3分层理解

思考:为什么Docker镜像要采用这种分层的结构呢?

最大的好处,我觉得莫过于是资源共享了!比如有多个镜像都从相同的Base镜像构建而来,那么宿主机
只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服
务了,而且镜像的每一层都可以被共享。

查看镜像分层的方式可以通过 docker image inspect 命令!

特点

Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!

7.4镜像commit

docker commit 从容器创建一个新的镜像。

docker commit 提交容器副本使之成为一个新的镜像!
# 语法
docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]

测试

# 1、从Docker Hub 下载tomcat镜像到本地并运行 -it 交互终端 -p 端口映射
docker run -it -p 8080:8080 tomcat

# 进入tomcat查看cd到webapps下发现全部空的,反而有个webapps.dist里有对应文件,cp -r
到webapps下!
root@aba865b53114:/usr/local/tomcat# cp -r webapps.dist/* webapps

# 注意:commit的时候,容器的名字不能有大写,否则报错:invalid reference format
docker commit -a="kuangshen" -m="no tomcat docs" 1e98a2f815b0 tomcat02:1.1

8.容器数据卷

8.1什么是容器数据卷

**docker的理念回顾: **

将应用和运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对于数据的要求,是希望能够
持久化的!

就好比,你安装一个MySQL,结果你把容器删了,就相当于删库跑路了,这TM也太扯了吧!
所以我们希望容器之间有可能可以共享数据,Docker容器产生的数据,如果不通过docker commit 生成
新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了!这样是行
不通的!

为了能保存数据在Docker中我们就可以使用卷!让数据挂载到我们本地!这样数据就不会因为容器删除
而丢失了!

作用

卷就是目录或者文件,存在一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,因此
能够绕过 Union File System , 提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂
载的数据卷。

特点:
1、数据卷可在容器之间共享或重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止
所以:总结一句话: 就是容器的持久化,以及容器间的继承和数据共享!

8.2使用数据卷

容器中直接使用命令来添加

# 命令
docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名
# 测试
[root@kuangshen ~]# docker run -it -v /home/ceshi:/home centos /bin/bash

查看数据卷是否挂载成功 docker inspect 容器id

使用 docker 安装 mysql

思考:mysql 数据持久化的问题!

docker search mysql #搜索镜像
docker pull mysql:5.7 #拉取镜像

# 启动容器 -e 环境变量!
# 注意: mysql的数据应该不丢失!先体验下 -v 挂载卷! 参考官方文档
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

8.3匿名和具名挂载

# 匿名挂载
-v 容器内路径
-P 随机映射端口
--name 起名字
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 匿名挂载的缺点,就是不好维护,通常使用命令 docker volume维护
docker volume ls 查看所有卷
# 具名挂载
-v 卷名:/容器内路径
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx nginx
# 查看挂载的路径
[root@kuangshen ~]# docker volume inspect nginxconfig
[
{
"CreatedAt": "2020-05-13T17:23:00+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginxconfig/_data",
"Name": "nginxconfig",
"Options": null,
"Scope": "local"
}
] #
怎么判断挂载的是卷名而不是本机目录名?
不是/开始就是卷名,是/开始就是目录名
# 改变文件的读写权限
# ro: readonly
# rw: readwrite
# 指定容器对我们挂载出来的内容的读写权限
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:rw nginx

通过Docker File 来添加(了解)

测试:

# 1、我们在宿主机 /home 目录下新建一个 docker-test-volume文件夹
[root@kuangshen home]# mkdir docker-test-volume
# 说明:在编写DockerFile文件中使用 VOLUME 指令来给镜像添加一个或多个数据卷
VOLUME["dataVolumeContainer1","dataVolumeContainer2","dataVolumeContainer
3"]
# 出于可移植和分享的考虑,我们之前使用的 -v 主机目录:容器目录 这种方式不能够直接在
DockerFile中实现。
# 由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有宿主机上都存在这样的特定目录.
# 2、编写DockerFile文件
[root@kuangshen docker-test-volume]# pwd
/home/docker-test-volume
[root@kuangshen docker-test-volume]# vim dockerfile1
[root@kuangshen docker-test-volume]# cat dockerfile1
# volume test
FROM centos
VOLUME ["dataVolumeContainer1","dataVolumeContainer2"]
CMD echo "-------end------"
CMD /bin/bash
# 3、build后生成镜像,获得一个新镜像 kuangshen/centos
docker build -f /home/docker-test-volume/dockerfile1 -t kuangshen/centos .   #注意最后有个.
# 4、启动容器
[root@kuangshen docker-test-volume]# docker run -it 0e97e1891a3d /bin/bash #
进入容器
[root@f5824970eefc /]# ls -l
total 56
lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x 2 root root 4096 May 11 11:55 dataVolumeContainer1 # 数据卷目录
drwxr-xr-x 2 root root 4096 May 11 11:55 dataVolumeContainer2 # 数据卷目录
drwxr-xr-x 5 root root 360 May 11 11:55 dev
drwxr-xr-x 1 root root 4096 May 11 11:55 etc
drwxr-xr-x 2 root root 4096 May 11 2019 home

在 dataVolumeContainer1 中新建一个文件 contains.txt  在外面怎么找到呢

# 问题:通过上述步骤,容器内的卷目录地址就已经知道了,但是对应的主机目录地址在哪里呢?
答案:使用docker inspect 0e97e1891a3d 查看amount的路径
cd /var/lib/docker/volumes/ee9425febe2fd789d1e053009b8af8dc2c1111884cd1f8e21efbe28fd3a61a94/_data
发现容器外也存在contains.txt,挂载成功

8.4数据卷容器

命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为
数据卷容器。
我们使用上一步的镜像:kuangshen/centos 为模板,运行容器 docker01,docker02,docker03,他
们都会具有容器卷

--volumes-from

#1.先启动一个父容器docker01
docker run -it --name docker01 kuangshen/centos
退出不停止:ctrl+P+Q
#创建docker02,docker03 让他们继承docker01  --volumes-from
docker run -it --name docker02 --volumes-from docker01  kuangshen/centos
docker run -it --name docker03 --volumes-from docker01  kuangshen/centos
#进入docker01容器
docker attach  docker1容器号 在dataVolumeContainer2新增contains.txt文件
#进入docker02容器 发现dataVolumeContainer2也新增了contains.txt文件

#进入docker03容器 发现dataVolumeContainer1也新增了docker03.txt文件
#进入docker01容器 发现dataVolumeContainer1也新增了docker03.txt文件

#删除docker01容器进入docker02发现数据依然存在

多个mysql实现数据共享

docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

docker run -d -p 3311:3306  -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7


9.DockerFile

大家想想,Nginx,tomcat,mysql 这些镜像都是哪里来的?官方能写,我们不能写吗?
我们要研究自己如何做一个镜像,而且我们写的微服务项目以及springboot打包上云部署,Docker就是
最方便的。
微服务打包成镜像,任何装了Docker的地方,都可以下载使用,极其的方便。
流程:开发应用=>DockerFile=>打包为镜像=>上传到仓库(私有仓库,公有仓库)=> 下载镜像 => 启动
运行。

9.1 什么是DockerFile

dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
构建步骤:
1、编写DockerFile文件
2、docker build 构建镜像
3、docker run

9.2 DockerFile构建过程

基础知识:
1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2、指令按照从上到下,顺序执行
3、# 表示注释
4、每条指令都会创建一个新的镜像层,并对镜像进行提交

流程:
1、docker从基础镜像运行一个容器
2、执行一条指令并对容器做出修改
3、执行类似 docker commit 的操作提交一个新的镜像层
4、Docker再基于刚提交的镜像运行一个新容器
5、执行dockerfile中的下一条指令直到所有指令都执行完成!

说明:
从应用软件的角度来看,DockerFile,docker镜像与docker容器分别代表软件的三个不同阶段。
DockerFile 是软件的原材料 (代码)
Docker 镜像则是软件的交付品 (.apk)
Docker 容器则是软件的运行状态 (客户下载安装执行)
DockerFile 面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可!

DockerFile:需要定义一个DockerFile,DockerFile定义了进程需要的一切东西。DockerFile涉及的内容
包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进
程和内核进程(当引用进行需要和系统服务和内核进程打交道,这时需要考虑如何设计 namespace的权
限控制)等等。

Docker镜像:在DockerFile 定义了一个文件之后,Docker build 时会产生一个Docker镜像,当运行Docker 镜像时,会真正开始提供服务;

Docker容器:容器是直接提供服务的。

9.3 DockerFile指令

关键字:

FROM # 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER # 镜像维护者的姓名混合邮箱地址
RUN # 容器构建时需要运行的命令
EXPOSE # 当前容器对外保留出的端口
WORKDIR # 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV # 用来在构建镜像过程中设置环境变量
ADD # 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY # 类似ADD,拷贝文件和目录到镜像中!
VOLUME # 容器数据卷,用于数据保存和持久化工作
CMD # 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最
后一个生效!
ENTRYPOINT # 指定一个容器启动时要运行的命令!和CMD一样
ONBUILD # 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的
ONBUILD被触发

9.4 实战测试

1.vim mydockerfile-centos # 编辑文件

FROM centos:7
MAINTAINER gaoyukui<[email protected]>

ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash

2.docker build -f dockerfile地址 -t 新镜像名字:TAG

会看到 docker build 命令最后有一个 . . 表示当前目录

3.运行

docker run -it 新镜像名字:TAG

4.列出镜像地的变更历史

docker history 镜像名

CMD 和 ENTRYPOINT 的区别

CMD

# 1、构建dockerfile
vim dockerfile-cmd-test
FROM centos
CMD [ "ls", "-a" ]

# 2、build 镜像
docker build -f dockerfile-cmd-test -t cmdtest .

# 3、执行
docker run cmdtest

# 4、如果我们希望用 -l 列表展示信息,我们就需要加上 -l参数
[root@kuangshen home]# docker run cmdtest -l
docker: Error response from daemon: OCI runtime create failed:
container_linux.go:349: starting container process caused "exec: \"-l\":
executable file not found in $PATH": unknown.
# 问题:我们可以看到可执行文件找不到的报错,executable file not found。
# 之前我们说过,跟在镜像名后面的是 command,运行时会替换 CMD 的默认值。
# 因此这里的 -l 替换了原来的 CMD,而不是添加在原来的 ls -a 后面。而 -l 根本不是命令,所
以自然找不到。
# 那么如果我们希望加入 -l 这参数,我们就必须重新完整的输入这个命令:
docker run cmdtest ls -al

ENTRYPOINT命令

# 1、构建dockerfile
vim dockerfile-entrypoint-test

# 2、build 镜像
docker build -f dockerfile-entrypoint-test -t entrypointtest .

# 3、执行
docker run entrypointtest

# 4、测试-l参数,发现可以直接使用,这里就是一种追加,我们可以明显的知道 CMD 和
ENTRYPOINT 的区别了
docker run entrypointtest -l

自定义镜像 tomcat

1、 mkdir -p kuangshen/build/tomcat

2、在上述目录下 touch read.txt

3、将 JDK 和 tomcat 安装的压缩包拷贝进上一步目录

4、在 /kuangshen/build/tomcat 目录下新建一个Dockerfile文件

# vim Dockerfile
FROM centos:7
MAINTAINER kuangshen<[email protected]>
#把宿主机当前上下文的read.txt拷贝到容器/usr/local/路径下
COPY read.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.22/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.22/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out

5、构建镜像

docker build -t diytomcat .  

6、运行启动 run

docker run -d -p 9090:8080 --name mydiytomcat -v /home/kuangshen/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/kuangshen/build/tomcat/tomcat9logs/:/usr/local/apache-tomcat-9.0.22/logs --privileged=true diytomcat

备注:Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
7、验证测试访问!

curl localhost:9090

8、结合前面学习的容器卷将测试的web服务test发布

1丶在/home/kuangshen/build/tomcat/test下
mkdir WEB_INF

vim web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>test</display-name>
</web-app>
cd ..

vim a.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello,kuangshen</title>
</head>
<body>
-----------welcome------------
<%=" my docker tomcat,kuangshen666 "%>
<br>
<br>
<% System.out.println("-------my docker tomcat-------");%>
</body>
</html>

9、测试

curl localhost:9090/test/a.jsp

9.5 发布自己的镜像

DockerHub

注册dockerhub https://hub.docker.com/signup,需要有一个账号

# 1、查看登录命令
[root@kuangshen tomcat]# docker login --help
Usage: docker login [OPTIONS] [SERVER]
# 2、登录
[root@kuangshen tomcat]# docker login -u kuangshen
Password:
WARNING! Your password will be stored unencrypted in
/root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentialsstore
Login Succeeded
# 3、将镜像发布出去
[root@kuangshen tomcat]# docker push kuangshen/diytomcat:1.0
The push refers to repository [docker.io/library/diytomcat]
0f02399c6fdf: Preparing
e79ea0c3a34e: Preparing
09281fa8fe38: Preparing
b56a902b0aef: Preparing
0683de282177: Preparing
# 拒绝:请求的资源访问被拒绝
denied: requested access to the resource is denied
# 问题:本地镜像名无帐号信息,解决加 tag即可
docker tag 251ca4419332 kuangshen/diytomcat:1.0
# 再次 push, ok
[root@kuangshen tomcat]# docker push kuangshen/diytomcat:1.0
The push refers to repository [docker.io/kuangshen/diytomcat]
0f02399c6fdf: Pushing [========> ]
9.729MB/59.76MB
e79ea0c3a34e: Pushing [==========> ]
3.188MB/15.41MB
09281fa8fe38: Pushing [> ]
3.823MB/324MB
b56a902b0aef: Pushed
0683de282177: Pushing [=> ]
5.997MB/237.1MB

阿里云镜像服务

1、登录阿里云

2、找到容器镜像服务

3、创建命名空间

4、创建镜像仓库

5、点击进入这个镜像仓库,可以看到所有的信息

6、测试推送发布

# 1、登录阿里云
[root@kuangshen tomcat]# docker login --username=aliyun5657454698 registry.cn-hangzhou.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in
/root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentialsstore
Login Succeeded
# 2、设置 tag
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/gyk_study/gyk-test:[镜像版本号]
[root@kuangshen tomcat]# docker tag f5a1e2fc8c7a registry.cn-hangzhou.aliyuncs.com/gyk_study/gyk-test:v1.0
# 3、推送命令
docker push registry.cn-hangzhou.aliyuncs.com/gyk_study/gyk-test:[镜像版本号]
[root@kuangshen tomcat]# docker push registry.cnbeijing.aliyuncs.com/bilibili-kuangshen/kuangshen-test:v1.0

标签:kuangshen,tomcat,容器,镜像,Docker,docker
From: https://www.cnblogs.com/KxWanna/p/17473466.html

相关文章

  • 通过 docker-compose 快速部署 Azkaban 保姆级教程
    目录一、概述二、Azkaban的调度流程三、前期准备1)部署docker2)部署docker-compose四、创建网络五、Azkaban编排部署1)安装MySQL2)下载Azkaban编译3)初始化azkaban用户和表4)配置5)启动脚本bootstrap.sh6)构建镜像Dockerfile7)编排docker-compose.yaml8)开始部署六、简单测试验......
  • docker-compose安装
    1、下载docker-composesudocurl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose2、增加可执行权限sudochmod+x/usr/local/bin/docker-compose3、添加软链接sudoln-s/usr/lo......
  • Docker化Spring Boot应用
    本文翻译自国外论坛medium,原文地址:https://medium.com/@bubu.tripathy/dockerizing-your-spring-boot-application-75bf2c6568d0Docker是一个强大的工具,允许开发人员将他们的应用程序打包在容器中可以在任何平台上轻松部署和运行。在对SpringBoot应用程序进行Docker化时,每个......
  • 3. docker的实践玩法
    1.docker的进程架构docker服务进程:就是针对docker服务的命令,启动,重启接口:通过参数指定容器的IP和端口,实现对容器的远程操作客户端命令行:对docker的操作命令 最后学会管理容器的网络,进程,容器等2.docker的命令镜像的拉取sudodockersearch镜像名称#搜索镜像文件......
  • 在Windows上无docker直接将基于Solon的jar包通过IDEA部署到Linux的docker上
    为何会选择学习solon?springboot对于我开发小企业应用太重,启动太慢,下班太晚!为何都用windows,还想着不安装dockerdesktop洁癖,运行路径能短就短。步骤(以solon官网的helloword为例)1、下载helloworld代码传送阵:点击我2、通过IDEA打开代码,并运行它(我是下载基于maven版本的)。3......
  • 10、Docker利用数据卷实现容器数据持久化与数据卷容器
    Docker利用数据卷实现容器数据持久化docker容器的分层容器的数据分层目录LowerDir:image镜像层,即镜像本身,只读UpperDir:容器的上层,可读写,容器变化的数据存放在此处,创建好容器,修改了数据,新生的的修改数据放在此处MergedDir:容器的文件系统,使用UnionFS(联合文件系统)......
  • ubuntu安装docker 记录
    2023.6.11上午sudoaptinstalldocker-io//安装systemctlstatusdocker//查看运行状态sudodockerrunhello-world//测试 为学习操作系统做准备,在docker中运行 docker安装以下 nasmgccbinnutilsqemu-system-i386mtools//《30天自制操作系统》......
  • docker 安装并配置nacos2.2.2 单机
    docker拉取文件找镜像参考mysql安装找镜像步骤:https://www.cnblogs.com/CodeLuckly/p/15710643.html拉取命令:dockerpullnacos/nacos-server:v2.2.2挂载目录:就是为了让nacos的容器中文件映射到宿主机上mkdir-p/mydata/nacos/logs/#新建logs目录......
  • nas使用docker部署alist​
    一、下载镜像xhofe/alist:latest二、创建容器第一行:文件/文件夹:此处填写在nas上事先创建好的目录位置装载路径:/opt/alist/data类型选读写启动容器,检查日志是否有报错项。如没有报错,容器应该为运行中的状态。三、打开alist页面点击快捷方式查看应用网址打开alist登录页面http://192......
  • Docker化Spring Boot应用
    本文翻译自国外论坛medium,原文地址:https://medium.com/@bubu.tripathy/dockerizing-your-spring-boot-application-75bf2c6568d0Docker是一个强大的工具,允许开发人员将他们的应用程序打包在容器中可以在任何平台上轻松部署和运行。在对SpringBoot应用程序进行Docker化时,每......