Docker必知必会
docker的两个重要概念
一个是容器(Container):容器特别像一个虚拟机,容器中运行着一个完整的操作系统。可以在容器中装 Nodejs,可以执行npm install,可以做一切你当前操作系统能做的事情
另一个是镜像(Image):镜像是一个文件,它是用来创建容器的。如果你有装过 Windows 操作系统,那么 Docker 镜像特别像“Win7纯净版.rar”文件
--总结:镜像用于创建容器,而容器像是一个完整的操作系统
安装 Docker
Mac:https://download.docker.com/mac/stable/Docker.dmg
Windows:https://download.docker.com/win/stable/Docker for Windows Installer.exe
Linux:https://get.docker.com/
安装完Docker后,你可能会发现自己可以打开一个漂亮的 Docker 窗口。其实这个窗口没什么用处,通常我们都是通过CLI命令行的方式操作 Docker的,就像 Git 一样
运行docker
容器运行程序,而容器从何而来?前面说过,容器由镜像创建,而镜像则由Dockerfile打包而成,它非常像我们前端的package.json文件
所以创建关系为:
Dockerfile: 类似于“package.json”
|
V
Image: 类似于“Win7纯净版.rar”
|
V
Container: 一个完整操作系统
创建文件
我们创建一个目录hello-docker,在目录中创建一个index.html文件,内容为:
Hello docker
然后再在目录中创建一个Dockerfile文件,内容为:`FROM nginx
COPY ./index.html /usr/share/nginx/html/index.html
`
EXPOSE 80
此时,你的文件结构应该是:
hello-docker
|____index.html
|____Dockerfile
打包镜像
文件创建好了,现在我们就可以根据Dockerfile创建镜像了!
在命令行中(Windows优先使用PowerShell)键入:
cd hello-docker/ # 进入刚刚的目录 docker image build ./ -t hello-docker:1.0.0 # 打包镜像
docker image build ./ -t hello-docker:1.0.0的意思是:基于路径./(当前路径)打包一个镜像,镜像的名字是hello-docker,版本号是1.0.0。该命令会自动寻找Dockerfile来打包出一个镜像
下面是Docker文件的详解:
CACHED [1/2] FROM docker.io/library/nginx:latest@sha256:c15da6c91de8d2f436196f3a768483ad32c258ed4e1beb3d367a27ed67253e66 0.0s
=> [2/2] COPY ./index.html /usr/share/nginx/html/index.html 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:6fbeb96f51853f09f12b316a4fa3363fc4c858cf2ae985f058086153d0dd832b 0.0s
=> => naming to docker.io/library/hello-docker:1.0.0
FROM nginx:基于哪个镜像
COPY ./index.html /usr/share/nginx/html/index.html:将宿主机中的./index.html文件复制进容器里的/usr/share/nginx/html/index.html
EXPOSE 80:容器对外暴露80端口
运行容器
我们刚刚使用 Dockerfile 创建了一个镜像。现在有镜像了,接下来要根据镜像创建容器:
docker container create -p 2333:80 hello-docker:1.0.0
docker container start xxx # xxx 为上一条命令运行得到的结果
然后在浏览器打开127.0.0.1:2333,你应该能看到刚刚自己写的index.html内容
在上边第一个命令中,我们使用docker container create来创建基于hello-docker:1.0.0镜像的一个容器,使用-p来指定端口绑定——将容器中的80端口绑定在宿主机的2333端口。执行完该命令,会返回一个容器ID
而第二个命令,则是启动这个容器
启动后,就能通过访问本机的2333端口来达到访问容器内80端口的效果了
Tips: 你可以使用docker container ls来查看当前运行的容器
当容器运行后,可以通过如下命令进入容器内部:
docker container exec -it xxx /bin/bash # xxx 为容器ID
原理实际上是启动了容器内的/bin/bash,此时你就可以通过bash shell与容器内交互了。就像远程连接了SSH一样
发生了什么

1.写一个Dockerfile
2.使用docker image build来将Dockerfile打包成镜像
3.使用docker container create来根据镜像创建一个容器
4.使用docker container start来启动一个创建好的容器

浙公网安备 33010602011771号