Skip to content

Commit 01e2bc9

Browse files
author
leiyuan
committed
Create 2019-08-12-初步了解docker容器、镜像以及dockerfile.md
1 parent 36587ed commit 01e2bc9

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
---
2+
layout: post
3+
title: 初步了解docker容器、镜像以及dockerfile
4+
subtitle: Docker容器、镜像、Dockerfile
5+
date: 2019-08-12
6+
author: LY
7+
header-img: img/post-bg-debug.png
8+
catalog: true
9+
tags:
10+
- docker
11+
---
12+
13+
> 欢迎大家关注我的以下主页,尤其是今日头条!!!谢谢🙏🙏🙏
14+
>
15+
> csdn:[雷园的csdn博客](https://blog.csdn.net/leiyuan2580)
16+
>
17+
> 个人博客:[雷园的个人博客](https://imlcl.store)
18+
>
19+
> 简书:[雷园的简书](https://www.jianshu.com/u/016322e40e1f)
20+
>
21+
> 今日头条:[来自底层程序员的仰望](https://www.toutiao.com/c/user/6132192948/#mid=1616456407686158)
22+
23+
24+
25+
### 开头说两句
26+
27+
1. 从今天开始呢,我会从头开始详细的说明一下**Docker**的使用。
28+
2. 虽说是详细的介绍,但是底层的东西我们不会介绍,想来大家也会明白为什么。(当然是因为不会了!!!)
29+
3. 我们会从简介开始到安装、使用、映射、挂载以及镜像的制作包括,黑箱、Dockerfile。
30+
4. 当然我们还会有更进一步的说明,环境变量、脚本、动态配置等等。
31+
5. 最后我们会说一下compose编排以及如何利用Swarm实现集群以及集群服务的动态更新等等内容,如果大家感兴趣,可以持续关注哦!!!
32+
33+
### 正式开始
34+
35+
##### 这一节我们将介绍以下内容
36+
37+
1. 什么是Docker?
38+
2. Docker镜像是什么?
39+
3. Docker容器是什么?
40+
4. 简单说一下Dockerfile。
41+
42+
43+
44+
#### 什么是Docker?
45+
46+
1. 首先,大家可以看一下Docker的图标。是一只大鲸鱼身上有很多集装箱。
47+
2. 那通俗的讲,我们的服务器就像是那只大鲸鱼,而我们的Docker就像是集装箱。
48+
3. 大家可以想一下集装箱解决了什么问题?他将每个集装箱中的环境相对隔离开来,这样我们的大货轮就可以运送不同种类的货物,而不用去根据不同的货物类型选择不同的货轮。
49+
4. 对应到我们的开发中也就是说我们可以把我们的应用程序打包到”集装箱“Docker中,这样一来,我们可以在任何可以容纳”集装箱“Docker的环境中运行我们的应用,而不会收到其他应用的影响。
50+
51+
52+
53+
#### 什么是Docker镜像?
54+
55+
1. 一般来说,我们的操作系统分为内核以及用户空间。
56+
2. 对于linux来说,内核启动后,会将root文件系统挂载到用户空间。
57+
3. 而Docker镜像就相当于是一个root文件系统。
58+
4. 比如较新的ubuntu18.04的官方镜像就包含了完整的一套ubuntu最小系统的root文件系统。
59+
5. 由此可见Docker镜像就是一个特殊的文件系统,提供了容器运行时所需要的各项文件以及一些必备的参数。
60+
6. 镜像的内容在构建之后不会发生任何改变。
61+
62+
63+
64+
#### 什么是Docker容器?
65+
66+
1. 在Docker中镜像与容器的关系,就像是Java中类与实例的关系一样。
67+
2. 镜像是静态的定义而容器则是镜像运行的时候生成的实体。
68+
3. 容器可以create、start、stop、remove等等,但是容器的基本操作是不会影响到镜像本身的,除非是commit操作覆盖了原有的镜像。
69+
4. 容器实际上是系统中的一个进程,但是与直接在系统中执行的进程有所不同,容器进程拥有自己的独立的命名空间。因此容器可以拥有自己的root文件系统、网络、进程等等。所有初学的时候很容易将容器与虚拟机搞混。
70+
71+
72+
73+
#### 什么是Dockerfile?
74+
75+
1. Dockerfile是文本格式的配置文件,我们可以使用Dockerfile快速的构建我们自己的Docker镜像。
76+
77+
2. Dockerfile是由一行行的命令语句组成的,同样可以使用#添加相关注释提高可读性。
78+
79+
3. 一般而言Dockerfile的内容分为基础镜像、用户信息、操作指令以及容器启动时执行指令。
80+
81+
4. 例如,我们需要自己构建一个tomcat镜像:
82+
83+
```dockerfile
84+
# 第一行必须指定基于的容器镜像
85+
FROM hub.c.163.com/public/centos:7.2-tools
86+
# 维护者信息
87+
MAINTAINER Lei emailAddress
88+
# 下载tomcat到指定路径备用
89+
ADD http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.21/bin/apache-tomcat-9.0.21.tar.gz /root/
90+
# 安装tomcat依赖环境java
91+
RUN yum -y update \
92+
# 安装openjdk1.8
93+
&&yum -y install java-1.8.0-openjdk* \
94+
# 进入tomcat所在目录
95+
&&cd /root/ \
96+
# 解压tomcat
97+
&&tar -zxvf apache-tomcat-9.0.21.tar.gz \
98+
# 修改文件夹名称
99+
&&mv apache-tomcat-9.0.21 tomcat_8080
100+
# 启动容器时执行脚本startup.sh
101+
CMD ["bash","/root/startup.sh"]
102+
```
103+
104+
5. 上述脚本内容如下
105+
106+
```shell
107+
#!/bin/bash
108+
# start tomcat
109+
bash /root/tomcat/bin/startup.sh
110+
tail -f /root/tomcat/logs/catalina.out
111+
```
112+
113+
114+
115+
#### 最后说两句
116+
117+
1. 作为程序员的我当然对于算法分析以及Java、Python、Go同样有着浓厚的兴趣,相信我们可以在技术的道路上走的更远。
118+
2. 同样也希望大家多多关注我!!!
119+
3. 谢谢大家!!!

0 commit comments

Comments
 (0)