• 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]
  • 相关阅读:
    P1121 环状最大两段子段和
    无题
    cdoj 1485 柱爷搞子串 sam treap
    自然数幂和
    Gym 100341C AVL Trees NTT
    线性筛分解质因子
    codeforces 366 Ant Man dp
    UVALive 6914 Maze Mayhem 轮廓线dp
    hdu 5790 Prefix 字典树 主席树
    莫比乌斯反演个人小结
  • 原文地址:https://www.cnblogs.com/Assist/p/13529840.html
Copyright © 2020-2023  润新知