Docker学习
链接: http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
文章目录
😲Docker是什么
**Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。**它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件(image文件)里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
😮Docker的用途
Docker 的主要用途,目前有三大类。
-
**提供一次性的环境。**比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
-
**提供弹性的云服务。**因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
-
**组建微服务架构。**通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
😀Docker的安装
Ubuntu
文档链接: https://docs.docker.com/engine/install/ubuntu/
Windows
文档链接: https://docs.docker.com/docker-for-windows/install/
其他安装
参考文档: https://docs.docker.com
安装完成后的验证
# # make sure the env variable is available
docker version
# or
docker info
Linux服务器下Docker的启动
sudo service docker start
# or
sudo systemctl start docker
⚽Image 文件
**Docker 把应用程序及其依赖,打包在 image 文件里面。**只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。
🍮查询所有的docker帮助
⚡docker的一些常用命令
列出本机所有的image文件
docker image ls
删除image文件
docker image rm [imageName]
从Docker Hub
或其他镜像站下载image
该操作不是必要的 在docker run
中可以附加该操作
docker image pull library/hello-world
library
是Docker Hub
的官方镜像站
运行某个image
docker container run {ImageName}
列出所有的容器
# is running
docker container ls
# all
docker container ls --all
终止运行的容器文件
# # 向容器发一个SIGKILL信号,强制终止容器运行
docker container kill {contrainer ID}
删除容器文件
docker container rm {container ID}
创建image文件
docker image build -t {ImageName}:[LABEL] {DIR WITH DOCKERFILE}
生成容器
docker container run -p {local_port}:{docker_port} -it image_name [CMD AFTER RUN]
只运行一次的容器
# # 在容器终止运行后自动删除容器文件
docker container run -rm [other args]
重复使用容器
# # 启动已经生成、已经停止运行的容器文件
docker container start {container id}
正确退出容器的姿势
# # 向容器发一个SIGTERM命令, 自动进行收尾清理工作, 然后终止
docker container stop {container id}
查看容器输出
# # 查看容器中程序的标准输出 如果没有指定-it参数, 就要用这个命令
docker container logs {container id}
进入一个正在运行的容器
docker container exec -it {container id} /bin/bash
复制容器中文件到本机
# # 注意最后的点, 表示当前目录
docker container cp [containID]:[/path/to/file] .
📗Dockerfile文件
学会使用 image 文件以后,接下来的问题就是,如何可以生成 image 文件?如果你要推广自己的软件,势必要自己制作 image 文件。
这就需要用到 Dockerfile 文件。它是一个文本文件,用来配置 image。Docker 根据 该文件生成二进制的 image 文件。
🌺制作自己的Docker容器
准备工作
-
假设项目文件夹为
./pro
-
准备
Docker
中运行的软件的实体, 可使用git
下载,保存在./pro
中 -
编写
./pro/dockerignore
文本文件 文件中提到的文件夹不会包含到app
文件夹中 -
编写
./pro/Dockerfile
文件, 主要有以下几项(以下是一个示例文件)# # FROM 继承官方的IMAGE文件, 冒号表示标签 FROM node: 8.4 # # COPY 将当前目录中的所有文件(除去被排除的文件), 都复制到iamge下的/app目录 COPY . /app # # WORKDIR 指定工作文件夹 WORKDIR /app # # RUN指令(可以有多个) 指定在image build时的动作 RUN npm install --registry=htpps://registry.npm.taobao.org # # EXPOSE 暴露端口, 允许外部连接 EXPOSE 3000 # # CMD 定义运行后动作 CMD /bin/bash
创建image文件
docker image build -t koa-demo .
生成容器
# -p 参数: 定义端口映射
# -it 参数: 容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
# koa-demo:0.01 容器名称和标签
# /bin/bash 容器运行后动作
docker container run -p 8000:3000 -it koa-demo /bin/bash
发布image文件
-
登录
docker login
-
为本地的 image 标注用户名和版本
docker image tag [imageName] [username]/[repository]:[tag]
-
发布image文件
docker image push [username]/[repository]:[tag]
-
查看发布的image文件
# 登录 hub.docker.com,就可以看到已经发布的 image 文件。