Docker 入门学习笔记(二)

上篇文化在那个主要在 windows 下安装了Docker 并学习了官方的简单指导。接下里按照官方的 Documentation(https://docs.docker.com/docker-for-windows/) 来继续进行学习。

1 Hello World 

(1)打开命令行终端

(2)查看 docker  安装版本

docker --version 
docker -v

(3)拉取 hello-world 镜像 (image)

docker pull hello-world 
docker run hello-world

可以直接运行 docker run  hello-world 这样docker 首先会在本地查找该镜像文件,如果找不到就会到远程去查找(相当于会自动 先 pull 在 run )

 (4) 查看当前所有的镜像

docker image  ls 

 发现有许多镜像,有部分使我们没有去下载但是它自动出现的,是作为上篇文章中的 getting-started 镜像的依赖 一起下载下来的。

(5)查看所有容器

  容器和镜像之间的关系相当于对象和类之间的关系。容器是镜像具体运行的一个进程,相当于镜像是模板,容器是镜像的一个实例。

docker container ls --all

 (6)docker 的命令后可以加上 --help 来进行查看帮助文档

(7) 常用命令:

  (a) 查看正在运行的容器

docker container ls
或
docker ps

  (b)查看所有容器

docker container ls -a
或
docker ps -a

  (c)停止容器/删除容器

docker stop containerid
docker rm containerid

  (d)删除所有非活动的容器

docker rm -f $(docker ps -a | grep Exit | awk '{ print $1 }')

   (e) 将容器打包成新的镜像

docker commit containerid imagename:tag

  (f)将镜像导出到压缩包文件中


docker save -o filename imagename
docker save imagename| gzip > filename

docker save imagename >path.rar

  (g)从文件(压缩包)中解压镜像

docker load --input filename

docker load < filename

2 进一步使用


(1)拉取 ubuntu 镜像 

docker run --interactive --tty ubuntu bash

--interactive 则让容器的标准输入保持打开,--tty 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,bash 是表示进入那个ubuntu的镜像的容器的shell

查看 主机名  hostname

主机名和容器ID 绑定

退出 exit

(2)在 docker 中使用 Nginx 服务器

 docker run  --detach --publish  92:92 --name webserver  nginx 

上述命令也可以简写为

 docker run  -d -p  92:92 --name webserver  nginx 

 成功启动,但是出现了和之前一样的问题,为啥本地端口不能成功访问。 官方教程中,说的是直接在浏览器中访问 http://localhost:92  即可访问到 nginx 对应的默认主页。

在经过查找资料后,得知,在 Windows 上运行 Docker 相当于先安装了一个 Linux 虚拟主机然后后在这个虚拟主机中使用 Docker ,所以 localhost 指的是虚拟主机的 Ip  而不是本机IP 。

因此我们需要获取虚拟主机的 IP 才能访问到该页面。具体可以参考另一篇文章(https://www.cnblogs.com/Assist/p/13530409.html

处理之后,上次在使用gettingstarted 这个镜像是不能正常访问的问题也解决了。

3 自己制作 docker 容器  

根据 koa-demos 来做为示例说明(参考链接 http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

首先通过 git 命令下载源码

git clone https://github.com/ruanyf/koa-demos.git

cd koa-demos

(1)Dockerfile 文件

在项目的根目录下可以通过建立 .dockerignore 文件来忽略对应的文件或文件夹,这里该文件的具体内容为:

.git
node_modules
npm-debug.log

加下来建立 Dockerfile 文件

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

接下来对改文件进行说明:

(a)FROM node:8.4  代表基础镜像是 node:8.4,即意味着次镜像是从这个镜像基础上搭建的。

(b)COPY . /app 表示将当前目录拷贝到镜像的 /app 文件夹中

(c)WORKDIR /app 声明工作目录是 /app

(d)RUN npm install --registry=https://registry.npm.taobao.org 表示安装 npm ,RUN 命令要尽量少,能够用一句命令安装的尽量用一句命令完成

(e)EXPOSE 3000 表示 将容器的3000 窗口暴露出来

(f)其他常用参数:ARG、ENV、CMD

  ARG:用法 ARG name   ;在build docker image 的时候传值使用。docker build --build-arg name=value

  ENV:ARG name value  ;可以在 dockerfile 中使用也可以在 image 和 container 中使用

  CMD:容器开启后执行对应命令;和 RUN 类似,但是 RUN 可以用多条 CMD 只能用一条,RUN 相当于打包东西进入 image 中,而 CMD 是在容器开启后执行。 指定了 CMD 命令以后,docker run 命令就不能附加命令了,否则会将 CMD 命令覆盖

(2)构建 image

docker image build -t koa-demo:0.0.1 .

(3) 查看 

docker image ls

(4)发布 image 文件

  (a)登录 dockerhub 账户

docker login

然后后会要求输入账号密码

   (b)给镜像打标签

docker image tag [imageName] [username]/[repository]:[tag]

docker image tag koa-demo:0.0.1 myname/koa-demo:0.0.1

  也可以不重新打标签,而是重新构建一个镜像

docker image build -t [username]/[repository]:[tag] .
或
docker commit containerid [username]/[repository]:[tag]  

  (c) 提交镜像

docker image push [username]/[repository]:[tag]
原文地址:https://www.cnblogs.com/Assist/p/13529840.html