Docker基础学习(学习笔记)

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/

虚拟机的缺点
  1. 资源占用十分多
  2. 冗余步骤多
  3. 启动很慢!

容器化技术

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

比较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.每个指令都会创建提交一个新的镜像层,并提交!

img

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						#构建的时候设置环境变量

img

实战测试,构建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流水线!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值