• 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]
  • 相关阅读:
    洛谷-P5357-【模板】AC自动机(二次加强版)
    洛谷-P3796-【模板】AC自动机(加强版)
    洛谷-P3808-【模板】AC自动机(简单版)
    2020 CCPC Wannafly Winter Camp Day2-K-破忒头的匿名信
    zabbix的搭建
    playbook 介绍
    ansible 模块
    shell 脚本判断ip
    shell 脚本安装lnmp
    expect 介绍
  • 原文地址:https://www.cnblogs.com/Assist/p/13529840.html
Copyright © 2020-2023  润新知