什么是Docker?
Docker 是⼀个开源,轻量级的应⽤容器引擎,以前我们想在window折腾linux系统,在上⾯部署应⽤来测试什么的,我们通常会安装⼀个虚拟机,在虚拟机上安装操作系统啊,应⽤什么的,搞垮了可以重新来什么的,不影响主机的系统,不过虚拟机⽐较重,启动慢,现在我们⽤docker,相⽐于虚拟机装操作系统,Docker是使⽤容器承载应⽤程序,轻量,⾼效,⽅便快捷的部署
- 装应用的容器
- 开发、测试、运维都偏爱的容器化技术
- 轻量级
- 扩展性
- 一次构建、多次分享、随处运行
Docker的基本概念
镜像(Image)、容器(Container)与仓库(Repository),这三个是docker中最基本也是最核心的概念,对这三个概念的掌握与理解,是学习docker的关键。
镜像(Image)
Docker本质上是一个运行在Linux操作系统上的应用,而Linux操作系统分为内核和用户空间,无论是Centos还是Ubuntu,都是在启动内核之后,通过挂载Root文件系统来提供用户空间的,而Docker镜像就是一个Root文件系统。镜像Image就是相当于安装操作的系统盘,U盘等等,⾥⾯可以包含node、gitlab等等,当然也可以包含完整的centos系统,甚⾄是centos + jenkins的或者centos + verdaccio(npm 私有库)
1 | # 列出所有镜像 |
从仓库拉取镜像
前面我们已经演示过使用docker pull命令拉取了hello-world镜像了,当然使用docker image pull命令也是一样的。
一般默认是从Docker Hub上拉取镜像的,Docker Hub是Docker官方提供的镜像仓库服务(Docker Registry),有大量官方或第三方镜像供我们使用,比如我们可以在命令行中输入下面的命令直接拉取一个Centos镜像:
1 | docker pull centos |
复制代码docker pull命令的完整写法如下:
1 | docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] |
复制代码拉取一个镜像,需要指定Docker Registry的地址和端口号,默认是Docker Hub,还需要指定仓库名和标签,仓库名和标签唯一确定一个镜像,而标签是可能省略,如果省略,则默认使用latest作为标签名,另外,仓库名则由作者名和软件名组成。
那么,我们上面使用centos,那是因为省略作者名,则作者名library,表示Docker官方的镜像,所以上面的命令等同于:
1 | docker pull library/centos:latest |
复制代码因此,如果拉取非官方的第三方镜像,则需要指定完整仓库名,如下:
1 | docker pull mysql/mysql-server:latest |
复制代码运行镜像
使用docker run命令,可以通过镜像创建一个容器,如下:
1 | docker run -it centos /bin/bash |
查看主机下存在的镜像
1 | docker images |
复制代码删除镜像
当本地有些镜像我们不需要时,那我们也可以删除该镜像,以节省存储空间,不过要注意,如果有使用该镜像创建的容器未删除,则不允许删除镜像。
1 | # image_name表示镜像名,image_id表示镜像id |
复制代码删除镜像的快捷命令:
1 | docker rmi image_name/image_id |
复制代码好了,关于Docker镜像的相关知识,我们就简单地介绍到这里,有机会的话,我们单独写一篇文章来谈谈,特别构建Docker镜像部分的相关知识,有必要深入再学习一下。
** 容器(Container)**
容器(Container)就是实际上跑应⽤的地⽅啦,可以理解为⼀个个互相隔离的⼩虚拟机,你的镜像就是安装在这⾥
启动容器有两种方式,一种是我们前面已经介绍过的,使用docker run命令通过镜像创建一个全新的容器,如下:
1 | docker run hello-world |
复制代码另外一种启动容器的方式就是启动一个已经停止运行的容器:
1 | # container_id表示容器的id |
复制代码要停止正在运行的容器可以使用docker container stop或docker stop命令,如下:
1 | # container_id表示容器的id |
容器名或ID:重启容器
1 | docker restart |
如果要查看本地所有的容器,可以使用docker container ls命令:
1 | # 查看所有容器 |
复制代码查看所有容器也有简洁的写法,如下:
1 | # 查看所有容器 |
删除容器
我们也可以使用docker container rm命令,或简洁的写法docker rm命令来删除容器,不过不允许删除正在运行的容器,因此如果要删除的话,就必须先停止容器,
1 | # container_id表示容器id,通过docker ps可以看到容器id |
复制代码当我们需要批量删除所有容器,可以用下面的命令:
1 | # 删除所有容器 |
复制代码# 删除所有退出的容器
1 | docker container prune |
复制代码进入容器
1 | # 进入容器,container_id表示容器的id,command表示linux命令,如/bin/bash |
端口映射
端口映射有三种方式
1 | docker run -itd -p 9090:9090 alpine_test(container_name) sh |
映射指定地址的主机端口到容器端口
1 | docker -p ip:hostPort:containerPort |
映射指定地址的任意可用端口到容器端口
1 | docker -p ip::containerPort |
映射本机的指定端口到容器的指定端口
1 | docer -p hostPort:containerPort |
仓库(Repository)
仓库(Repository) ⽤于存放镜像,有点类似的git仓库,docker hub是个公共的仓库,不过在我们这边⽹速慢,⼀般把源设置为淘宝源等
后⾯我们会⽤⼏个docker容器分别安装jenkins、verdaccio、yapi等组成⼀个单机的⼩⼩微服务,现在多多少少知道为什么要⽤docker了吧
window安装docker
下载安装包
1 | https://hub.docker.com/editions/community/docker-ce-desktop-windows/ |
按照安装向导next即可
运行
不会自动启动
在开始菜单搜索Docker, 打开即可
细节配置, 可参考这个链接(https://docs.docker.com/docker-for-windows/#docker-settings-dialog)
测试是否安装成功
在CMD中运行如下命令, 有显示版本号或者显示”Hello from Docker!”, 则代表安装成功
- 查看版本号列出容器
1
docker -v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19docker ps [OPTIONS]
OPTIONS说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。 - 安装nginx史上最全Docker环境安装指南
1
2docker run nginx
docker run -p 8080:80 nginx
10分钟快速掌握Docker必备基础知识