docker初探

之前一直知道docker这个东西,也没有深入去研究,今天粗略学了下,写下来记录

理解:

docker可以看做一种方便打包部署的方式?例如你指定了node版本是8.0,当你把你的代码打包成镜像之后,把镜像发给部署的人,部署的人在服务器中导入镜像,跑起来成为容器的时候,会自动下载node的版本,就不用配置node环境了。

docker中有三个重要的概念:镜像 容器 仓库

镜像呢,就像是一个class类;容器就像是一个实例;仓库就是放镜像的地方;

这个仓库目前有hub.docker.com 或者阿里的仓库;当你打包了镜像怎么传给别人呢,有两种方式,一种是将镜像上传到上述其中的仓库,然后让别人下载后运行;另一种方式就是将镜像导出成压缩文件,别人就能通过导入的方式导入镜像。上传到仓库的过程有点像发布npm包的过程。

学习docker我参考了两个文章:

https://juejin.cn/post/6844903918372143112

http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

更加推荐下面的阮一峰教程,说的更通俗易懂一点吧

结尾附上我得有道云笔记,一些API使用

1、打印docker版本

docker version

2、拉取镜像 默认从docker官方提供的镜像仓库服务

docker pull hello-world

3、配置docker的源为阿里的

"registry-mirrors": ["dftbcros.mirror.aliyuncs.com"],

docker初探_第1张图片

4、查看镜像列表

docker images

5、使用hello-world运行一个容器

docker run hello-world

docker container run hello-world

docker container run命令会从 image 文件,生成一个正在运行的容器实例。

注意,docker container run命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull命令并不是必需的步骤。

6、拉取一个centos镜像

docker pull centos

docker pull library/centos:latest

上面使用centos,那是因为省略作者名,则作者名library,表示Docker官方的镜像

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

拉取一个镜像,需要指定Docker Registry的地址和端口号,默认是Docker Hub,还需要指定仓库名和标签,仓库名和标签唯一确定一个镜像,而标签是可能省略,如果省略,则默认使用latest作为标签名,另外,仓库名则由作者名和软件名组成

7、运行镜像 可以通过镜像创建一个容器

docker run 镜像名称

8、删除镜像

如果有使用该镜像创建的容器未删除,则不允许删除镜像

dockere image rm image_name/image_id

docker rmi image_name/image_id

9、看所有正在运行容器

docker ps -a

-a :显示所有的容器,包括未运行的。

-f :根据条件过滤显示的内容。

–format :指定返回值的模板文件。

-l :显示最近创建的容器。

-n :列出最近创建的n个容器。

–no-trunc :不截断输出。

-q :静默模式,只显示容器编号。

-s :显示总的文件大小。

10、删除容器

docker rm 容器id

11、停止容器

docker stop container_id

对于那些不会自动终止的容器,必须使用docker container kill 命令手动终止

手动终止还会占用硬盘,可以用rm删除

12、创建镜像

(1)新建一个文本文件.dockerignore

内容:

.git node_modules npm-debug.log

(2)创建文本文件 Dockerfile

内容:

FROM node:8.4 COPY . /app WORKDIR /app RUN npm install --registry=https://registry.npm.taobao.org EXPOSE 3000

CMD node demos/01.js

FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。

COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。

WORKDIR /app:指定接下来的工作路径为/app。

RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。

EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。

CMD node demos/01.js,它表示容器启动后自动执行node demos/01.js

RUN命令与CMD命令的区别在哪里?

简单说,RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;

CMD命令则是在容器启动后执行。

另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。

注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令

(3)命令创建image文件 -t指定image名字

最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。

docker image build -t koa-demo . 或者 docker image build -t koa-demo:0.0.1 .

docker build -t koa-demo .

13、生成容器

docker container run命令会从 image 文件生成容器。

docker container run -p 8000:3000 -it koa-demo /bin/bash 或者 docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash

上面命令的各个参数含义如下:

-p参数:容器的 3000 端口映射到本机的 8000 端口。

-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。

koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。

/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。

如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。 root@66d80f4aaf1e:/app#

这表示你已经在容器里面了,返回的提示符就是容器内部的 Shell 提示符。执行下面的命令。 root@66d80f4aaf1e:/app# node demos/01.js

14、发布image文件

(1)hub.docker.com 或 cloud.docker.com 注册一个账户 docker login登录

(2)为本地的 image 标注用户名和版本。

docker image tag [imageName] [username]/[repository]:[tag] # 实例 docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1

也可以不标注用户名,重新构建一下 image 文件。 docker image build -t [username]/[repository]:[tag] .

最后,发布 image 文件。 $ docker image push [username]/[repository]:[tag]

15、导出镜像

docker save -o koa-demo.tar koa-demo

16、导入镜像

docker load -i nginx.tar 

你可能感兴趣的:(前端,docker,api)