docker入门学习文档
- 第一章 什么是docker 容器
- 1.1docker容器发展史
- 1.2 docker容器是什么
- 第二章 了解docker
- 2.1docker思想
- 2.1.1集装箱
- 2.1.2标准化
- 第三章 走近docker
- 3.1 docker 镜像
- 第四章 centos 下docker 安装(aliyun抢占实例)
- 第五章 docker 部署自己的应用
- 5.1 Dockerfile目录
- 5.2 Dockerfile详解
- 5.3 构建容器
- 5.4 容器镜像外网访问
- 第六章 阿里云部署docker应用步骤步骤
第一章 什么是docker 容器
1.1docker容器发展史
2010年几个年轻人成立了一个做PAAS平台的公司dotCloud.起初公司发展的不错,不但拿到过一些融资,还获得了美国著名孵化器YCombinator的支持,后来微软谷歌亚马逊这样的大厂商也纷纷加入PAAS平台,竞争十分激烈,dotCloud举步维艰.
2013年可能是公司发展的不是很好,工程师又不想自己的努力付之东流,于是他们决定将他们的核心技术开源.这项技术就是docker.当时docker的功能就是将linux容器中的应用代码打包,可以轻松的在服务器之间进行迁移.
无心插柳柳成荫,docker技术风靡全球,于是dotCloud公司改名为docker Inc,并全面投入到docker的开发之中.
2014.6 Docker发布了第一个版本 Docker1.0
2014.7 获得C轮融资 $4000W
2015.4 获得D轮融资 $9500W
至今已经发布到docker
1.2 docker容器是什么
docker容器是标准化的软件单元
将软件打包到标准化单元中,以进行开发,运输和部署
通俗的将,docker容器相当于笔筒,代码,数据库相当于笔,橡皮,笔筒里既可以放笔,也可以放橡皮。可以把hello word放在docker中,可以把网站放入docker中,可以把任何想得到的程序放在docker中。
第二章 了解docker
2.1docker思想
2.1.1集装箱
没有集装箱之前运输货物,东西零散容易丢失,有了集装箱之后货物不容易丢失,我们可以把货物想象成程序,目前我们要把程序部署到一台新的机器上,可能会启动不起来,比如少一些配置文件什么的或者少了什么数据,有了docker的集装箱可以保证我们的程序不管运行在哪不会缺东西.
2.1.2标准化
- 运输方式
docker运输东西有一个超级码头,任何地方需要货物都由鲸鱼先送到超级码头,然后再由鲸鱼从超级码头把货物送到目的地去.对应的技术来说,比如我们要把台式机的应用部署到笔记本上,我们可能选择用QQ发过去或者用U盘拷过去,docker就标准化了这个过程,我们只需在台式机上执行一个docker命令,把鲸鱼派过来,把程序送到超级码头去,再在笔记本上执行一个docker命令,然后由鲸鱼把程序从超级码头送到笔记本上去. - 存储方式
当我们把程序存储到笔记本上时,我们需要一个目录,且我们要记住这个目录,因为下次我们可能还要修改,有了docker之后我们就不用记住了程序在哪里了,我们使用的时候只需要一条命令就行了. - API接口
docker提供了一系列rest api的接口,包含了对docker也就是对我们的应用的一个启动停止查看删除等等,如当我们要启动tomcat时我们要执行startup命令,当我们要停止时要执行shutdown命令,如果不是tomcat,我们可能还需要一些别的命令.有了docker我们记docker的命令就可以对其进行操作.
第三章 走近docker
镜像就是上面说的集装箱,仓库就是超级码头,容器就是我们运行程序的地方.docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器.
build:构建,就是构建镜像.
ship:运输,运输镜像,从仓库和主机运输.
run:运行的镜像就是一个容器.
build,ship,run和镜像,仓库,容器是一一对应的.
3.1 docker 镜像
- docker 镜像代表了容器的文件系统里的内容,是容器的基础,镜像一般是通过 Dockerfile 生成的
- docker 的镜像是分层的,所有的镜像(除了基础镜像)都是在之前镜像的基础上加上自己这层的内容生成的
- 每一层镜像的元数据都是存在 json 文件中的,除了静态的文件系统之外,还会包含动态的数据
这张图完整的记录了docker images整个命令
docker images :列出 docker host 机器上的镜像,可以使用 -f 进行过滤
docker build:从 Dockerfile 中构建出一个镜像
docker history:列出某个镜像的历史
docker import:从 tarball 中创建一个新的文件系统镜像
docker pull:从 docker registry 拉去镜像
docker push:把本地镜像推送到 registry
docker rmi: 删除镜像
docker save:把镜像保存为 tar 文件
docker search:在 docker hub 上搜索镜像
docker tag:为镜像打上 tag 标记
第四章 centos 下docker 安装(aliyun抢占实例)
- 如果原本安装docker先卸载
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装依赖设置yum仓库
安装依赖库
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker
yum list docker-ce --showduplicates | sort -r # 查看可安装的版本
[root@iZ0jl3altxdbnjd3v45sqjZ ~]# yum list docker-ce --showduplicates | sort -r
已加载插件:fastestmirror
已安装的软件包
可安装的软件包
Loading mirror speeds from cached hostfile
docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el7 @docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable
指定安装版本
yum -y install docker-ce-18.03.1.ce
[root@iZ0jl3altxdbnjd3v45sqjZ ~]# yum install docker-ce docker-ce-cli containerd.io 安装命令
[root@iZ0jl3altxdbnjd3v45sqjZ ~]# docker version # 查看版本,是否安装成功
Client: Docker Engine - Community
Version: 20.10.6
API version: 1.41
Go version: go1.13.15
Git commit: 370c289
Built: Fri Apr 9 22:45:33 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 启动并加入开机启动
systemctl start docker
systemctl enable docker
第五章 docker 部署自己的应用
5.1 Dockerfile目录
这里的例子已django为python框架的一个django-admin工程
我们需要建立一个dockerfile告诉docker需要做什么,这里我建立了Dockerfile,并将我们的web文件放到了和它同一个目录下.
(venv) ➜ myblog git:(master) ✗ ll
total 24
-rw-r--r-- 1 chenbaojun staff 0B 5 17 17:53 Dockerfile
-rw-r--r-- 1 chenbaojun staff 10B 5 13 10:49 README.md
drwxr-xr-x 3 chenbaojun staff 96B 5 13 14:45 __pycache__
-rwxr-xr-x 1 chenbaojun staff 538B 5 13 09:15 manage.py
drwxr-xr-x 10 chenbaojun staff 320B 5 13 10:40 my_blog
drwxr-xr-x 7 chenbaojun staff 224B 5 13 10:39 myblog
-rw-r--r-- 1 chenbaojun staff 18B 5 17 11:33 requirements.txt
drwxr-xr-x 6 chenbaojun staff 192B 5 13 14:44 venv
5.2 Dockerfile详解
FROM kubesphere/python-36-centos7:v2.1.0
RUN mkdir code
COPY . code
WORKDIR code
RUN pip install --trusted-host mirrors.aliyun.com -r requirements.txt
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
首先是基础镜像from 此镜像为安装了python3.6的centos镜像
创建code目录
将代码拷贝到code目录
pip安装依赖报
执行启动命令
5.3 构建容器
在Dockerfile目录下执行
docker build -t myblog .
之后执行docker image
myblog git:(master) ✗ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myblog latest aea0730068a2 About a minute ago 770MB
就能看到刚刚构建的myblog容器了
5.4 容器镜像外网访问
从Dockerfile可以看出外网暴露的容器端口是8080,但是我们需要将这个端口暴露出来,方便访问,所以运行命令
docker run -d -p 8000:8000 myblog
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
运行之后我们直接可以在浏览器访问了
第六章 阿里云部署docker应用步骤步骤
- 安装git ,代码已代码库管理所以需要git
yum install -y git
2 . 执行上面的docker build 命令,构建容器
如果发现
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
需要执行
service docker status
找到问题,之后重启
service docker restart
步骤和以上一样