java–jar(环境)–打包项目带上环境(镜像)–docker仓库(商店)–下载我们发布的镜像–直接运行即可
docker 是基于go语言开发的开源项目
docker核心:隔离机制
虚拟化技术
官网:https://www.docker.com/
文档地址:https://docs.docker.com/
仓库地址:https://hub.docker.com/
DevOps(开发、运维)
应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:一键运行打包镜像发布,测试
更便捷的升级和扩容
使用了Docker之后,我们部署应用就行搭积木一样
项目打包为一个镜像,扩展 服务器A 服务器B
更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的
更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个物理机运行很多的容器实例,服务器的性能可以被压榨到极致
镜像(image):
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===》run==》tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器(containrer):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
启动,停止,删除,基本命令
目前就可以把这个容器理解为就是一个简易的linux系统
仓库(repository):
仓库就是存放镜像的地方,
仓库分为公有仓库和私有仓库,
Docker Hub默认是国外的,
阿里云。。。都有容器服务器(配置镜像加速)
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker --help # 帮助命令
镜像命令
docker images 查看所有本地的主机上的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
docker/getting-started latest 3ba8f2ff0727 2 months ago 27.9MB
hello-world latest d1165f221234 3 months ago 13.3kB
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
-a, --all # 列出所有的镜像
-q,--quiet # 只显示镜像的id
docker search 搜索镜像
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10962 [OK]
mariadb MariaDB Server is a high performing open sou… 4144 [OK]
--filter=stars=3000 搜索出来的镜像就是stars大于3000的
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
lianyanjies-MacBook-Pro:/ lianyanjie$ docker pull mysql
Using default tag: latest # 如果不写tag,默认就是最新的
latest: Pulling from library/mysql
69692152171a: Downloading #分层下载,docker image的核心 联合文件系统
1651b0be3df3: Downloading
951da7386bc8: Downloading
0f86c95aa242: Downloading
37ba2d8bd4fe: Downloading
6d278bb05e94: Downloading
497efbd93a3e: Downloading
f7fddf10c2c2: Download complete
16415d159dfb: Download complete
0e530ffc6b73: Download complete
b0a4a1a77178: Download complete
cd90f92aa9ef: Download complete
latest: Pulling from library/mysql
69692152171a: Pull complete
1651b0be3df3: Pull complete
951da7386bc8: Pull complete
0f86c95aa242: Pull complete
37ba2d8bd4fe: Pull complete
6d278bb05e94: Pull complete
497efbd93a3e: Pull complete
f7fddf10c2c2: Pull complete
16415d159dfb: Pull complete
0e530ffc6b73: Pull complete
b0a4a1a77178: Pull complete
cd90f92aa9ef: Pull complete
Digest: sha256:d50098d7fcb25b1fcb24e2d3247cae3fc55815d64fec640dc395840f8fa80969 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#等价于
docker pull mysql == docker pull docker.io/library/mysql:latest
#指定版本下载
lianyanjies-MacBook-Pro:/ lianyanjie$ docker pull mysql:5.7
5.7: Pulling from library/mysql
69692152171a: Already exists
1651b0be3df3: Already exists
951da7386bc8: Already exists
0f86c95aa242: Already exists
37ba2d8bd4fe: Already exists
6d278bb05e94: Already exists
497efbd93a3e: Already exists
a023ae82eef5: Pulling fs layer
e76c35f20ee7: Pulling fs layer
e887524d2ef9: Pulling fs layer
ccb65627e1c3: Waiting
5.7: Pulling from library/mysql
69692152171a: Already exists
1651b0be3df3: Already exists
951da7386bc8: Already exists
0f86c95aa242: Already exists
37ba2d8bd4fe: Already exists
6d278bb05e94: Already exists
497efbd93a3e: Already exists
a023ae82eef5: Pull complete
e76c35f20ee7: Pull complete
e887524d2ef9: Pull complete
ccb65627e1c3: Pull complete
Digest: sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi 删除镜像
docker rmi -f 镜像id #删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id #删除多个的镜像
docker rmi -f $(docker images -aq) #删除全部的镜像
容器命令
说明:有了镜像才可以参加容器
docker pull centos
新建容器并启动
docker run [可选参数] image
#参数说明
--name=“Name” 容器名字 tomcat01,tomcat02 ,用来区分容器
-d 以后台方式运行,jar nohup
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
#测试,启动并进入容器
lianyanjies-MacBook-Pro:/ lianyanjie$ docker run -it centos /bin/bash
[root@e42d644e4a74 /]# ls #查看容器内的centos,基础版本,很多命令都是不完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#从容器中退回主机
[root@e42d644e4a74 /]# exit
exit
列出所有运行中的容器
#docker ps命令
#列出当前正在运行的容器
-a #列出当前正在运行的容器——带出历史运行过的容器
-n=? # 显示最近创建的容器
-q #只显示容器的编号
lianyanjies-MacBook-Pro:/ lianyanjie$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
lianyanjies-MacBook-Pro:/ lianyanjie$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e42d644e4a74 centos "/bin/bash" 4 minutes ago Exited (0) 2 minutes ago quizzical_einstein
5992b001ba3d d1165f221234 "/hello" 3 hours ago Exited (0) 3 hours ago unruffled_morse
3214a443fd72 d1165f221234 "/hello" 3 hours ago Exited (0) 3 hours ago magical_williamson
b4e573a34ef3 3ba8f2ff0727 "/docker-entrypoint.…" 16 hours ago Exited (0) 3 hours ago gallant_engelbart
退出容器
exit # 直接容器停止并退出
ctrl +p+q #容器不停止退出
删除容器
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。# 强制停止当前的容器
常用其他命令
后台启动容器
#命令 docker run -d 镜像名
lianyanjies-MacBook-Pro:/ lianyanjie$ docker run -d centos
#问题 docker ps,发现centos 停止了
#常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#ngixn,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
`docker logs -f -t --tail` 容器,没有日志
# 自己编写一段shell脚本
lianyanjies-MacBook-Pro:/ lianyanjie$ docker run -d centos /bin/sh -c "while true;do echo lianyanjie;sleep 1;done"
7b2b6f705f46dac43daf17098622af78b91a06ed8a1b1e8fffa24c90824d2643
lianyanjies-MacBook-Pro:/ lianyanjie$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b2b6f705f46 centos "/bin/sh -c 'while t…" 3 seconds ago Up 2 seconds keen_bhabha
#显示日志
--tf
--tail number #想要显示的日志条数
docker logs -tf --tail 10 7b2b6f705f46
查看容器中的进程信息
top命令 docker top 容器id
lianyanjies-MacBook-Pro:/ lianyanjie$ docker top 7b2b6f705f46
UID PID PPID C STIME TTY TIME CMD
root 4252 4225 0 07:23 ? 00:00:00 /bin/sh -c while true;do echo lianyanjie;sleep 1;done
root 4545 4252 0 07:27 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
查看镜像的元数据
# docker inspect 容器id
docker inspect 7b2b6f705f46
进入当前正在运行的容器
# 我们通常容器是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id bsahShell
#测试
lianyanjies-MacBook-Pro:/ lianyanjie$ docker exec -it 7b2b6f705f46 /bin/bash
[root@7b2b6f705f46 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@7b2b6f705f46 /]#
[root@7b2b6f705f46 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 07:35 ? 00:00:00 /bin/sh -c while true;do echo lianyanjie;sleep 1;done
root 31 0 0 07:36 pts/0 00:00:00 /bin/bash
root 62 1 0 07:36 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 63 31 0 07:36 pts/0 00:00:00 ps -ef
[root@7b2b6f705f46 /]#
#方式二
docker attach 容器id
正在执行当前的代码。。。
#docker exec -it 容器id #进入容器后开启一个新的终端,可以在里面操作
#docker attach 容器id #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
#进入docker容器内部
lianyanjies-MacBook-Pro:~ lianyanjie$ docker attach 6d028fb5474d
[root@6d028fb5474d /]# cd /home
[root@6d028fb5474d home]# ls
#在容器内新建一个文件
[root@6d028fb5474d home]# touch test.java
[root@6d028fb5474d home]# ls
test.java
[root@6d028fb5474d home]# exit
#将这文件拷贝出来到主机上
lianyanjies-MacBook-Pro:home lianyanjie$ docker cp 6d028fb5474d:/home/test.java /Users/lianyanjie/
#拷贝是一个手动过程,未来我们使用 -v 卷到技术,可以实现 自动同步
docker安装nginx
1.搜索 docker search nginx
2.下载 docker pull nginx
3.运行测试
#-d 后台运行
#--name 给容器命名
#-p 宿主机端口:容器内部端口
lianyanjies-MacBook-Pro:~ lianyanjie$ docker run -d --name nginx01 -p 3344:80 nginx
43735b63db9febe53b91ac6cc7a339ec413a1929e91e601c3fe04144e030104b
lianyanjies-MacBook-Pro:~ lianyanjie$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43735b63db9f nginx "/docker-entrypoint.…" 17 seconds ago Up 15 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
lianyanjies-MacBook-Pro:~ lianyanjie$ curl localhost:3344
<!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>
#进入容器
lianyanjies-MacBook-Pro:~ lianyanjie$ `docker exec -it nginx01 /bin/bash`
root@43735b63db9f:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
docker 安装tomcat
#官方的使用
docker run -it --rm tomcat:9.0
#我们之前的启动都是后台,停止了容器之后,容器还是可以查到 doucker run -it --rm,一般用来测试,用完就删
#下载启动
docker pull tomcat:9.0
#启动运行
docker run -d -p 8080:8080 --name tomcat01 tomcat
#测试访问没有问题
#进入容器 ,docker exec -it tomcat01 /bin/bash
lianyanjies-MacBook-Pro:~ lianyanjie$ docker run -d -p 3355:8080 --name tomcat01 tomcat
5291c1e175abcf6bcbb79627412988bbe76eece6468eb0886125e30dd6d38391
lianyanjies-MacBook-Pro:~ lianyanjie$ docker exec -it tomcat01 /bin/bash
root@5291c1e175ab:/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
#发现问题:1.linux命令少了 2.没有webapps 阿里云镜像的原因,默认是最小的镜像,所有不必要的都剔除掉
#保证最小可运行的环境
部署es+kibana
#启动 elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
# 查看cpu的状态 docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
6df4f012d6bd elasticsearch 0.68% 1.174GiB / 1.941GiB 60.47% 2.88kB / 2.55kB 260MB / 729kB 46
#测试一下es是否成功
http://localhost:9200/
{
"name": "6df4f012d6bd",
"cluster_name": "docker-cluster",
"cluster_uuid": "TsRzoGuXRVmJ8MK4-fDRGg",
"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"
}
#增加内存的限制,修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
#查看docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b7e6f58c1e7b elasticsearch02 1.47% 399.3MiB / 1.941GiB 20.09% 6.35kB / 7.12kB 46.3MB / 729kB 48
commit镜像
docker commit 提交容器成为一个新的副本
#命令和git原理类似
docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像明:[TAG]
实战测试
#启动一个默认的tomcat
#发现这个默认的tomcat 是没有webapps应用,镜像的原因,官方的镜像默认webapps下面是没有文件的
#我自己拷贝进去了基本的文件
#将我们操作过的容器通过commit提交为一个镜像 我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改过的镜像
docker commit -a="lianyanjie" -m="add webapps app" f87b89abb9d2 tomcat02:1.0
#如果你想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像
容器数据卷
Docker容器中产生的数据,同步到本地 = 这就是卷技术
总结:容器的持久化和同步操作!容器间也是可以数据共享的!
使用数据卷
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录 -p
docker run -it -v /home/ceshi:/home centos /bin/bash
好处:我们以后修改只需要在本地修改即可,容器内会主动同步
实战:安装mysql 同步数据
#获取镜像
lianyanjies-MacBook-Pro:~ lianyanjie$ docker pull mysql:5.7
#运行容器 ,需要做数据挂载。 #安装启动mysql,需要配置密码
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
docker run -d -p 3310:3306 -v /Users/lianyanjie/learn/mysql/conf:/etc/mysql/conf.d -v /Users/lianyanjie/learn/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
#启动成功后,本地来测试一下
假设我们将容器删除,发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能
具名和匿名挂载
#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有卷volume的情况
docker volume ls
local 4c12012be80cf9004713ad753f60e80fe9219a1570fe06c87b6725b18c378422
local 59eb20550248007e84e28bbcb88ac1cb431a0c9d15d8e86f9bb1bc0a04463880
#这里发现,这种就是匿名挂载,我们在-v 只写了容器内的路径,没有写容器外的路径
#通过-v 卷名:容器内路径
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls
local juming-nginx
#查看卷的地址
lianyanjies-MacBook-Pro:~ lianyanjie$ docker volume inspect juming-nginx
[
{
"CreatedAt": "2021-06-07T15:17:52Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]
所有的docker的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/**
大多数情况使用的是具名挂载
#如何确定是具名挂载还是匿名挂载,还是指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 # 指定路径挂载
DockerFile:方式二
DockerFile就是用来构建docker镜像的构建文件,命令脚本,
通过这个脚本生成镜像,镜像是一层一层的,脚本是一个一个的命令,每个命令都是一层
# 创建一个dockerfile文件,名字可以随机,建议dockerfile
#文件中的内容 指令(大写) 参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end-----"
CMD /bin/bash
#这里的每个命令,就是镜像的一层
lianyanjies-MacBook-Pro:docker-test-volume lianyanjie$ docker build -f /Users/lianyanjie/docker-test-volume/dockerfile1 -t lianyanjie/centos:1.0 .
[+] Building 0.1s (5/5) FINISHED
=> [internal] load build definition from dockerfile1 0.0s
=> => transferring dockerfile: 124B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos:latest 0.0s
=> [1/1] FROM docker.io/library/centos 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:95549536f68a9615bccc8fe1d9de80a765c423b0c7ac63729919b907ca6b7919 0.0s
=> => naming to docker.io/lianyanjie/centos:1.0
启动自己写的容器
lianyanjies-MacBook-Pro:docker-test-volume lianyanjie$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 3034aa8baf65 25 minutes ago 677MB
redis latest fad0ee7e917a 4 days ago 105MB
nginx latest d1a364dc548d 11 days ago 133MB
tomcat 9.0 c43a65faae57 3 weeks ago 667MB
tomcat latest c43a65faae57 3 weeks ago 667MB
mysql latest c0cdc95609f1 3 weeks ago 556MB
lianyanjie/centos 1.0 95549536f68a 6 months ago 209MB
centos latest 300e315adb2f 6 months ago 209MB
elasticsearch 7.6.2 f29a1ee41030 14 months ago 791MB
lianyanjies-MacBook-Pro:docker-test-volume lianyanjie$ docker run -it 95549536f68a /bin/bash
[root@9078b5959b86 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
测试一下刚才的文件是否同步出去
这种方式我们未来使用的十分多,因为我们通常会构建自己的镜像
假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径
数据卷容器
两个mysql同步数据
1. docker run -it --name docker01 lianyanjie/centos:1.0
2. docker run -it --name docker02 --volumes-from docker01 lianyanjie/centos:1.0
3. docker run -it --name docker03 --volumes-from docker01 lianyanjie/centos:1.0
通过–volumes-from 实现容器间的数据共享
1.docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
2.docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
#这个时候,可以实现两个容器数据同步
结论:容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。一旦持久化到了本地,这个时候,本地的数据是不会删除的
DockerFile 构建过程
构建步骤:
1.编写一个dockerfile文件
2.docker build 构建成为一个镜像
3.docker run 运行镜像
4.docker push 发布镜像
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品
Docker容器:容器就是镜像运行起来提供服务器
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤:tomcat镜像,这个tomcat压缩包,就是添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #指定暴露端口
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile 这个时候就会运行ONBUILD的指令 触发指令
COPY #类似ADD 将我们的文件拷贝到镜像中
ENV #构建到时候,设置环境变量
创建一个自己的centos
1.编写dockerfile的文件
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 mydockerfile-centos -t mycentos:0.1 .
3.测试运行
docker run -it mycentos:0.1
Docker网络
SpringBoot 微服务打包docker镜像
1.构建Springboot项目
2.打包应用
3.编写dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
4.构建镜像
docker build -t lianyanjie666 .
docker images
5.发布运行
lianyanjies-MacBook-Pro:idea lianyanjie$ docker run -d -P --name lianyanjie-springboot-web lianyanjie666
3dc0630873ffecc80721f607aa51f279eed9eb52a3d6658237da1938c4571047
lianyanjies-MacBook-Pro:idea lianyanjie$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3dc0630873ff lianyanjie666 "java -jar /app.jar …" 15 seconds ago Up 13 seconds 0.0.0.0:55000->8080/tcp, :::55000->8080/tcp lianyanjie-springboot-web
6.测试
curl localhost:55000/hello
测试cmd
1.编写dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]
2. 打包镜像
docker build -f dockerfile-cmd-test -t cmdtest .
3. 查找镜像
docker images
4. 运行镜像
docker run be8cf7de8763
5. 想追加一个命令-l ls -al
cmd的清理下 -l替换了CMD["ls","-a"]命令,-l不是命令所以报错
测试ENTERYPOINT
1.编写dockerfile-cmd-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]
2. 打包镜像
docker build -f dockerfile-cmd-entrypoint -t cmd-entrypoint
3. 查找镜像
docker images
4. 运行镜像
docker run be8cf7de8763
5. 想追加一个命令-l ,是直接拼接在我们的ebtrypoint命令的后面
2.编写tomcat的Dockerfile
FROM centos
MAINTAINET lianyanjie<>631258447@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORK $MYPATH
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_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -f $CATALINA_HOME/bin
/logs/catalina.out
3.构建镜像
docker build -t diytomcat
4.运行镜像
docker run -d -p 9090:8080 --name diytomcat -v /home/lianyanjie/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test
企业实战
Docker Compose
Docker Swarm
CI/CD jenkins 流水线