Docker学习
- Docker概述
- Docker安装
- Docker命令
- 镜像命令
- 容器命令
- 操作命令
- …
- Docker镜像
- 容器数据卷
- DockerFile
- Docker网络原理
- IDEA整合Docker
- Docker Compose
- Docker Swarm
- CI/CD Jenkins
Docker概述
Docker为什么出现?
一款产品:开发上线 两套环境!应用环境,应用配置
开发—运维。问题:在我的电脑上可以运行,版本更新,导致服务不可用,对于运维来说,考验就十分大
环境配置是十分麻烦的,每一个机器都要部署环境(集群Redis、ES、Hadoop)!费时费力的.
发布一个项目(jar+(Redis、Mysql、JDK、ES)),项目能否都带上环境安装打包!
之前在服务器配置一个应用的环境Redis、MYSQL、jdk配置超级麻烦,不能跨平台
传统:开发jar、运维来做!
现在:开发打包部署上线,一套流程做完!
Dcoker给以上的问题,提出了解决方案!
隔离:Docker核心思想!打包装箱!每个箱子是互相隔离的。
Docker通过隔离机制,可以将服务器利用到极致!
本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习!
Docker历史
2010年,几个搞it的年轻人,在美国成立了一家公司“dotCloud”
做一些pass的云计算服务,LXC有关的容器技术
Docker刚刚诞生的时候,没有引起行业的注意!就将Docker开源化
2013年开源化。
Docker越来越多的人发现Docker的有点,Docker每一个月都会更新一个版本
Docker为什么这么火?十分轻巧
在容器技术出来之前,我们都是使用虚拟机的技术!
虚拟机:在Windows装一个VM,通过这个软件可以虚拟出来一台或者多台电脑!笨重!
虚拟机也是一种属于虚拟化技术,Docker容器技术,也是一种虚拟化技术
vm:linux centos原生镜像,隔离,需要开启多个虚拟机 几个G
docker:隔离,镜像(最核心的镜像4m大小 +jdk+mysql)十分的小巧,运行镜像就可以了 几M kb 秒级启动!
到现在,所有开发人员都必须要会Docker!
聊一聊Docker
Docker是基于Go语言开发的!开源项目!
官网:https://www.docker.com/
文档地址:https://docs.docker.com/ Docker的文档是超级详细的!
仓库地址:https://hub.docker.com/
虚拟机的缺点
- 资源占用十分多
- 冗余步骤多
- 启动很慢!
容器化技术
容器化技术不是模拟的一个完整的操作系统
比较Docker和虚拟机技术的不同:
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
- 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。
DevOps(开发、运维)
应用更快速的交付和部署
传统:一堆帮助文档、安装程序
Docker:打包镜像发布测试,一键运行
更便捷的升级和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样!
更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的
更高效的计算资源利用
Docker是内核级别的虚拟化,可以在我们一个物理机上运行很多的容器实例。服务器的性能可以被压榨到极致
Docker安装
Docker的基本组成
镜像(image):
docker镜像就好像是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===>run====>tomcat01容器(提供服务)
通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)
容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的
启动、停止、删除、基本命令
目前就可以吧这个容器理解为就是一个简易的linux
仓库(repository):
仓库就是存放镜像的地方!
仓库氛围共有仓库和私有仓库
Docker hub(默认是国外的)
阿里云都有容器服务器(配置镜像加速)
安装Docker
环境准备
1.需要linux基础
2.CentOS7
#系统内核是3.10以上
root@hecs-x-medium-2-linux-20200722093047:/# uname -r
4.15.0-91-generic
#系统版本
root@hecs-x-medium-2-linux-20200722093047:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
root@hecs-x-medium-2-linux-20200722093047:/# uname -r
4.15.0-91-generic
root@hecs-x-medium-2-linux-20200722093047:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
1.卸载旧版本Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.安装需要的安装包
sudo yum install -y yum-utils
3.设置镜像的仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装Docker、docker-ce社区 ee企业版
yum install docker-ce docker-ce-cli containerd.io
5.启动docker
systemctl start docker
6.使用docker version是否安装成功
7.运行hello-world
8.查看一下下载的hello-world镜像
docker images
了解:卸载docker
1.卸载依赖
2.删除资源
3.配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://10xg6ow3.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
回顾HelloWorld流程
底层原理
docker是怎么工作的?
Docker是一个Clinet-Server结构的系统
Docker为什么比VM快
1.docker有着比虚拟机更少的抽象层
2.docker利用的是宿主机的内核,vm需要Guest OS
所以说,新建一个容器的时候,docker不需要跟虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别。Docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级的。
Docker的常用命令
帮组命令
docker version #显示docker 的详细信息
doceker info #显示docker的系统信息,包括镜像和容器的数量
docker --help #帮忙命令(万能命令)
帮助文档的地址:https://docs.docker.com/engine/reference/run/
镜像命令
docker images 查看所有本地的主机上的镜像
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 6 months ago 13.3kB
#解释
REPOSITORY 镜像仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATE 镜像的创建时间
SIZE 镜像的大小
#可选项
-a, --all Show all images (default hides intermediate images)#列出所有的镜像
-q, --quiet Only show numeric IDs #只显示镜像的id
docker search搜索镜像
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9763 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3564 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 717 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 78
#可选项 通过搜索来过滤
--filter 过滤
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker pull mysql
Using default tag: latest#如果不写tag默认是latest
6ec8c9369e08: Pull complete#分层下载。docker image的核心,联合文件系统
177e5de89054: Pull complete
ab6ccb86eb40: Pull complete
e1ee78841235: Pull complete
09cd86ccee56: Pull complete
78bea0594a44: Pull complete
caf5f529ae89: Pull complete
cf0fc09f046d: Pull complete
4ccd5b05a8f6: Pull complete
76d29d8de5d4: Pull complete
8077a91f5d16: Pull complete
922753e827ec: Pull complete
Digest: sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc
Status: Downloaded newer image for mysql:latest#真实地址
docker.io/library/mysql:latest
#安装指定版本的mysql
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
6ec8c9369e08: Already exists#联合文件系统中会去重
177e5de89054: Already exists
ab6ccb86eb40: Already exists
e1ee78841235: Already exists
09cd86ccee56: Already exists
78bea0594a44: Already exists
caf5f529ae89: Already exists
4e54a8bcf566: Pull complete
50c21ba6527b: Pull complete
68e74bb27b39: Pull complete
5f13eadfe747: Pull complete
Digest: sha256:97869b42772dac5b767f4e4692434fbd5e6b86bcb8695d4feafb52b59fe9ae24
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi 删除镜像
#单个删除镜像
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker rmi 8679ced16d20
Untagged: mysql:5.7
Untagged: mysql@sha256:97869b42772dac5b767f4e4692434fbd5e6b86bcb8695d4feafb52b59fe9ae24
Deleted: sha256:8679ced16d206961b35686895b06cfafefde87ef02b518dfc2133081ebf47cda
Deleted: sha256:355f87dc5125a32cc35898a4dde17fb067585bc0d86704b5a467c0ccc0eea484
Deleted: sha256:8299d5c38042216210125535adb2600e46268a0e2b9ec799d12ea5b770236e79
Deleted: sha256:07311a303b2c7cf2ac6992aaf68e12326fe7255985166939cbab7d18b10e0f47
Deleted: sha256:306c9bc1ce2997d000bb6f1ea4108420d9752df93ce39164b7a2f876b954afc4
#删除多个镜像
docker rmi -f 镜像id 镜像id
#删除所有镜像
docker rmi -f $(docker images -aq)
容器命令
说明:有了镜像才可以创建容器,下载一个Contos镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image
#参数说明
--name=“Name” 容器名称。用于区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口-p:8080:800
主机端口:容器端口
容器端口
-P 随机指定端口
#测试,启动并进入容器
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -it centos /bin/bash
[root@14237998fa91 /]# ls #查看容器内的contos
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
列出所有的运行容器
#docker ps 命令
-a #列出当前正在运行的容器,带出历史运行的容器
-n=? #显示最近创建的容器(显示个数)
-q #只显示容器的编号
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14237998fa91 centos "/bin/bash" 6 minutes ago Exited (0) 5 minutes ago relaxed_raman
8b9fce2191c4 centos "/bin/bash" 2 hours ago Exited (127) 10 minutes ago optimistic_jennings
bbdc853e6782 bf756fb1ae65 "/hello" 15 hours ago Exited (0) 15 hours ago blissful_goldstine
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker ps -n=2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14237998fa91 centos "/bin/bash" 7 minutes ago Exited (0) 5 minutes ago relaxed_raman
8b9fce2191c4 centos "/bin/bash" 2 hours ago Exited (127) 10 minutes ago optimistic_jennings
退出容器
exit #直接容器停止并退出
ctrl +P+Q #容器不停止退出
删除容器
docker rm 容器id #删除指定容器,不能删除在运行的容器 强制删除 rm -f
docker rm -f $(docker ps -aq) #删除所有容器
启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
常用的其他命令
docker run -d #后台启动
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -d centos
d4c4d2b11b828faab1d4fd2e1707f48403afb1ce4bd7b561aad5e3bfcf90e185
#问题 docker ps 发现centos停止了
#常见的坑,docker容器使用后台运行,就必须要有一个前台进程。doker发现没有应用,就会自动停止。
#nginx容器启动后,发现自己没有提供服务,就会立即停止,就没有程序了
查看日志命令
docker logs
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
--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:37) or relative (e.g. 42m for 42 minutes)
查看容器的进程信息
#docker top 容器id
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker top 70bf5764e384
UID PID PPID C STIME TTY TIME CMD
root 23199 23183 0 16:23 ? 00:00:00 /bin/bash
查看镜像的元数据
#docker inspect
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker inspect 70bf5764e384
进入当前正在运行的容器
#我们通常容器都是使用后台方式运行的,需要进入容器,修改一定的配置
#命令
docker exec -it 容器id bashshell
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker exec -it 70bf5764e384 /bin/bash
[root@70bf5764e384 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:23 pts/0 00:00:00 /bin/bash
root 19 0 0 08:37 pts/1 00:00:00 /bin/bash
root 33 19 0 08:37 pts/1 00:00:00 ps -ef
#方式二
docker attach 容器id
#docker exec #进入容器后开启一个新的终端,可以在里面操作(重用)
#docker attach #进入容器正在执行的终端,不会启动新的进程!
从容器内拷贝文件到主机上
docker cp 容器id:地址1 地址2
作业练习
Docker安装Nginx
# 1.搜索镜像 search
# 2.下载镜像 pull
# 3.运行单元测试
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker search nginx
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker pull nginx
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 8cf1bfb43ff5 3 days ago 132MB
centos latest 831691599b88 5 weeks ago 215MB
# -d 后台运行
# --name 给容器命令
# -p 宿主机端口:容器内部端口
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -d --name nginx01 -p 3305:80 8cf1bfb43ff5
d8394ed3a4f3c7938267c7a014158e7b7d818cb11a21a5afa7bcddd6b1344695
[root@hecs-x-medium-2-linux-20200722093047 ~]#
[root@hecs-x-medium-2-linux-20200722093047 ~]#
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
d8394ed3a4f3 8cf1bfb43ff5 "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 0.0.0.0:3305->80/tcp nginx01
70bf5764e384 centos "/bin/bash" 37 minutes ago Up 37 minutes charming_mcnulty
[root@hecs-x-medium-2-linux-20200722093047 ~]# curl localhost:3305
<!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>
思考问题:每次改动nginx配置文件,都需要进入容器内部。十分麻烦,我们要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部可以自动修改。
作业2:Docker 装一个tomcat
1.docker pull tomcat #安装tomcat
2.[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -d -p 3355:8080 --name tomcat1 tomcat #运行docker
3.配置安全组
4.访问
#坑:容器内/usr/local/tomcat/webapps下没有任何项目。都是webapps.list文件下中。cp webapps.list webapps下
root@19d30c65454d:/usr/local/tomcat/webapps# cp -r webapps.dist/* webapps
可视化工具
portainer(先用这个,图形化界面工具)
Docker镜像讲解
镜像是什么
所有的应用,直接打包docker镜像,直接跑起来!
如何得到镜像
- 从远程仓库下载
- 朋友拷贝
- 自己制作一个镜像DockerFile
Docker镜像加载原理
联合文件系统
特点
Docker镜像都是只读的,当容器启动时,一个新的可读层被加载到镜像额顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层。
如何提交一个自己的镜像
commit镜像
docker commit 提交容器成为一个新的副本
# 命令和git原理类似
docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像:【TAG】版本
实战测试
#1.启动一个默认的tomcat
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -it -d -p 8080:8080 tomcat
#2.发现这个默认的tomcat是没有webapps应用的,镜像的原因,官方的镜像默认webapps下面是没有文件的
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker exec -it 6159a7d0aa79 /bin/bash
root@6159a7d0aa79:/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
root@6159a7d0aa79:/usr/local/tomcat# cd webapps
root@6159a7d0aa79:/usr/local/tomcat/webapps# ls
root@6159a7d0aa79:/usr/local/tomcat/webapps# cd ..
root@6159a7d0aa79:/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
root@6159a7d0aa79:/usr/local/tomcat# cd webapps.dist/
root@6159a7d0aa79:/usr/local/tomcat/webapps.dist# ls
ROOT docs examples host-manager manager
root@6159a7d0aa79:/usr/local/tomcat/webapps.dist# cd .
root@6159a7d0aa79:/usr/local/tomcat/webapps.dist# cd ..
#3.我自己拷贝进去了基本的文件
root@6159a7d0aa79:/usr/local/tomcat# cp -r webapps.dist/* webapps #将webapps.list下面的文件夹copy到webapps目录下
#4.将我们操作过得容器通过commit提交为一个镜像,我们以后就使用我们修改过的镜像
容器数据卷
什么是容器数据卷
docker 的理念回顾
将应用和环境打包成一个镜像!
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
MYSQL,容器删了,删库跑步。需求:mysql数据可以存储在本地
容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地!
这就是卷技术,目录的挂载,将我们容器的目录挂载到linux上面。
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的
使用数据卷
方式一:直接使用命令来挂载
docker run -it -v 主机目录,容器目录
#测试
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -it -d -v /home/ceshi:/home centos /bin/bash
c760f3aa4e190f2316b1bbdb86341ad760389ff34b8840e53753e83e6e34a14c
#启动起来我们可以用docker inspect查看
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker inspect c760f3aa4e19
好处:我们以后修改需要在本地修改即可,容器内会自动同步
实战:安装MYSQL
#1.search mysql
#2.pull mysql
DockerFile介绍
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构建生成的镜像,最终发布和运行的产品,原来是jar、war
Docker容器:容器就是镜像运行起来提供服务的
很多指令:
DockerFile的指令
FROM #基础镜像,一切从这么开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包就是需要添加进去的
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口
CMD #指定这个容器启动的时候要运行的命令,只有最后一个生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承的DockerFile这个时候就会运行ONBUILD的指令,触发指令
COPY #类似ADD,将我们的文件拷贝到镜像中
ENV #构建的时候设置环境变量
实战测试,构建Centos
Docker Hub中99%镜像都是从这个基础镜像过来的 FROM scratch
创建一个自己的Centos
#1.编写dockerfile的文件
[root@hecs-x-medium-2-linux-20200722093047 dockerfile]# vim mydockerfile-centos
[root@hecs-x-medium-2-linux-20200722093047 dockerfile]# cat mydockerfile-centos
FROM centos
MAINTAINER luby<luby6220@163.com>
ENV MYPATH /usr/local
WORKDIR MYPATH
run yum -y install vim
run yum -y install net-tools
EXPOSE 80
CMD echo "---end---"
CMD /bin/bash
#2. 构建镜像
#命令 docker build -f dockerfile 文件路径 -t 镜像名:【tag】
[root@hecs-x-medium-2-linux-20200722093047 dockerfile]# docker build -f mydockerfile-centos -t mycentos:1.0 .
#3.测试
[root@69fa0e3d375a MYPATH]# vim ca
CM
ENTRYPOINT:
Docker 网络
Docker0
三个网络:
#问题,docker是如何处理容器网络访问的?
企业实战
Docker Compose
Docker Swarm
CI/CD Jenkins流水线!