zoey

谷歌浏览器可正常显示图片

0%

初识docker

Docker的思想

集装箱

会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以了。

标准化

运输的标准化:Docker有一个码头,所有上传的集装箱都放在了这个码头上,当谁需要某一个环境,就直接到码头搬运这个集装箱即可。

命令的标准化:Docker提供了一些标准化命令,帮助我们去获取集装箱等等操作。

提供了REST的API:衍生出了很多的图形化界面,例:Rancher

隔离性

Docker在运行集装箱的时候,会在Linux的内核中,单独的开辟一片空间,这片空间不会影响到其他程序。

1
2
3
注册中心(超级码头,上面放的就是集装箱)
镜像(集装箱)
容器(运行起来的镜像)
1
2
镜像,就是面向对象中的类,相当于一个模板。
容器,就是类创建的实例,就是依据镜像这个模板创建出来的实体。

Docker的基本操作

安装Docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1,下载安装Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-mapper-persistent-data lvm2
2,设置一下下载Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3,安装Docker
yum makacache fast
yum -y install docker-ce

4,启动,并设置为开机自动启动,测试
启动Docker服务
systemctl start docker
设置开机自动启动
systemctl enable docker
测试
docker run hello-world

Docker的中央仓库

1
2
3
4
5
6
1,Docker官方的中央仓库,这个仓库是镜像最全的,但是下载速度较慢
https://hub.docker.com/
2,国内的镜像网站:网易蜂巢,daoCloud
http://c.163yun.com/hub#/home
http://hub.daocloud.io/
3,在公司内部会采用私服的方式拉取镜像
1
2
3
4
需要在/etc/docker/demon.json
{
"registry-mirrors":["https://registry.docker-cn.com"]
}

镜像(集装箱)的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1,拉取镜像到本地
docker pull 镜像名称
举个例子
docker pull daocloud.io/library/tomcat:8.5.15-jre8

2,查看全部本地镜像
docker images

3,删除本地文件
docker rmi 镜像的标识(前面两个字母)

4,镜像的导入导出(不规范)
将本地的镜像导入
docker save -o 导出的路径 镜像id

加载本地的镜像文件
docker load -i 镜像文件

修改镜像名称
docker tag 镜像id 新镜像名称:版本

容器的操作(运行起来的镜像)

1
2
3
4
5
6
7
8
9
运行容器
简单操作
docker run 镜像的标识 镜像名称 [:tag]
-d:代表后台运行容器
-p:宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
--name:容器名称:指定容器的名称

docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[:tag]
例:docker run -d -p 8081:8080 --name b8
1
2
3
docker ps 查看正在运行的容器
docker ps -a 查看全部的容器,包括没有运行
docker ps -q 只查看容器得到标识
1
2
3
查看容器的日志
docker logs -f 容器id
-f :可以滚动查看日志的最后几行
1
2
进入到容器内部
docker exec -it 容器id bash
1
2
3
4
5
6
7
删除容器(删除容器前,需要先停止容器)

docker stop 容器id 停止指定的容器
docker stop $(docker ps -qa)停止全部容器

docker rm 镜像id 删除指定容器
docker rm $(docker ps -qa) 删除全部容器

Docker自定义镜像

中央仓库上的镜像,也是Docker的用户自己上传过去的

1
2
3
4
5
6
1,创建一个Dockerfile的文件,并且指定自定义镜像信息。
Dockerfile文件中常用的内容
from:指定当前自定义镜像依赖的环境
copy:将相对路径下的内容复制到自定义的镜像中
workdir:声明镜像的默认工作目录
cmd:需要执行的命令(在workdir下执行的,cmd可以写多个,以最后一个为准)

镜像就是上面说的集装箱,仓库就是超级码头,容器就是我们运行程序的地方.docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器.

build:构建,就是构建镜像.

ship:运输,运输镜像,从仓库和主机运输.

run:运行的镜像就是一个容器.

build,ship,run和镜像,仓库,容器是一一对应的.

DockerFile的构建过程

基础知识:

1,每个保留关键字(指令)都是必须是大写字母

2,执行从上到下顺序执行

3,#表示注释

4,每一个指令都会创建提交一个新的镜像层,并提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#1,编写自己的Dockfile文件
FROM centos
MAINTAINER zoey<2793988587@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUM yum -y install vim

EXPOSE 80

CMD echo $MYPATH
CMD /bin/bash

#2,通过这个文件构建镜像
docker bulid -f dockerfile文件路径 -t 创建的镜像名:[tag] .

#3,测试运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@iz88m0zba2pfzdz dockerfile]# docker build -f mydocker -t mycentos:0.1 .
Sending build context to Docker daemon 27.65kB
Step 1/8 : FROM centos #执行dockerfile第一行
latest: Pulling from library/centos #拉取官方的centos镜像
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
---> 300e315adb2f
Step 2/8 : MAINTAINER zoey<2793988587@qq.com>
---> Running in 6fed6811727f
Removing intermediate container 6fed6811727f
---> 428884ab35bb
Step 3/8 : ENV MYPATH /usr/local
---> Running in e3f315c1c37c
Removing intermediate container e3f315c1c37c
---> ddbb9ad846b0
Step 4/8 : WORKDIR $MYPATH
---> Running in 35a1e3ceba27
Removing intermediate container 35a1e3ceba27
---> d7d770769889
Step 5/8 : RUN yum -y install vim #下载vim
---> Running in f119b2fc3459
CentOS Linux 8 - AppStream 2.2 MB/s | 6.3 MB 00:02
CentOS Linux 8 - BaseOS 1.2 MB/s | 2.3 MB 00:01
CentOS Linux 8 - Extras 9.2 kB/s | 8.6 kB 00:00
Dependencies resolved.
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64
vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
which-2.21-12.el8.x86_64

Complete!
Removing intermediate container f119b2fc3459
---> 492b0e9bfd9f
Step 6/8 : EXPOSE 80
---> Running in ea437f060be5
Removing intermediate container ea437f060be5
---> 7b1ffe6341bf
Step 7/8 : CMD echo $MYPATH
---> Running in 2a3e3fb9e634
Removing intermediate container 2a3e3fb9e634
---> cadb8d02b5fc
Step 8/8 : CMD /bin/bash
---> Running in 485a50d91473
Removing intermediate container 485a50d91473
---> d7dde5695515
Successfully built d7dde5695515
Successfully tagged mycentos:0.1

11

Docker文件存储

docker文件存储格式,linux的一个存储技术,叫做联合文件系统,是一种分层的文件系统,可以将不同的目录挂到同一个虚拟文件系统下。

比如test1下有三个文件夹,test2下有两个文件夹,还有一个readme文件.联合文件系统就是可以在一个文件夹(test)中看到多个文件夹(test1,test2)中的内容.

docker镜像系统的每一层都是只读的,然后把每一层加载完成之后这些文件都会被看成是同一个目录,相当于只有一个文件系统.docker的这种文件系统被称之为镜像.