Docker

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 流水线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值