美文网首页
docker学习(4) DevOps视角

docker学习(4) DevOps视角

作者: August________ | 来源:发表于2019-10-24 00:03 被阅读0次

    docker学习(4) DevOps视角

    纵观Docker

    • 运维(Ops)视角

    • 开发(Dev)视角

    • 运维包括:下载镜像、运行新的容器,在容器内运行命令、以及销毁容器

    • 开发包括:与应用相关的内容,比如从github拉取一些应用,解释其中的Dockerfile,将应用容器化,在容器里运行他们。

    运维视角

    • 安装Docker涉及两个组将:Docker客户端和Docker daemon
    • daemon实现了Docker引擎的API
    • Linux默认安装的视角,客户端和daemon之间的通信是通过本地IPC/UNIX Socker完成的(/var/run/docker.sock)
    • 使用docker version命令来检查客户端和服务端是否已经成功运行,并且可以相互通信。
    $ docker version
    Client: Docker Engine - Community
     Version:           19.03.4
     API version:       1.40
     Go version:        go1.12.10
     Git commit:        9013bf583a
     Built:             Fri Oct 18 15:53:51 2019
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          19.03.4
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.10
      Git commit:       9013bf583a
      Built:            Fri Oct 18 15:52:23 2019
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.2.10
      GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
     runc:
      Version:          1.0.0-rc8+dev
      GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
    
    

    镜像

    • 可以将Docker镜像理解为一个包含OS文件系统和应用的对象。
    • 在Docker世界里,镜像实际上等价于未启动的容器。
    • 查看镜像
    ~$ docker image ls 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    
    • 获取一个新镜像——ubuntu:latest
    $ docker pull ubuntu:latest
    latest: Pulling from library/ubuntu
    22e816666fd6: Pull complete 
    079b6d2a1e53: Pull complete 
    11048ebae908: Pull complete 
    c58094023a2e: Pull complete 
    Digest: sha256:a7b8b7b33e44b123d7f997bd4d3d0a59fafc63e203d17efedf09ff3f6f516152
    Status: Downloaded newer image for ubuntu:latest
    docker.io/library/ubuntu:latest
    lhf@lhf-virtual-machine:~$ docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              latest              cf0f3ca922e0        4 days ago          64.2MB
    
    
    • Docker每个镜像都有自己的唯一ID
    • 用户可以通过镜像的ID和名称来使用镜像

    容器

    • 启动容器
    $ docker container run -it ubuntu:latest /bin/bash
    root@19e6da84f9c4:/# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    
    • docker container run命令使Docker daemon启动新的容器

    • -it 参数将Shell切换到容器终端,开启容器的交互模式,使当前的shell连接到容器的终端

    • 使用ps查看容器的进程

    root@19e6da84f9c4:/# ps -elf
    F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
    4 S root          1      0  0  80   0 -  4627 wait   14:38 pts/0    00:00:00 /bin/bash
    4 R root         11      1  0  80   0 -  8600 -      14:56 pts/0    00:00:00 ps -elf
    
    • 按Ctrl-PQ组合键,可以退出容器的同时来保持容器的运行。
    • 查看系统内全部运行状态的容器
    $ docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    19e6da84f9c4        ubuntu:latest       "/bin/bash"         22 minutes ago      Up 22 minutes                           unruffled_hoover
    
    

    连接到运行中的容器

    • 连接到运行中的容器
    $ docker container exec -it unruffled_hoover bash
    root@19e6da84f9c4:/# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    
    
    • 使用命令docker container stop 和docker container rm来停止并杀死容器
    $ docker container stop unruffled_hoover
    unruffled_hoover
    lhf@lhf-virtual-machine:~$ docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    docker container ls -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    19e6da84f9c4        ubuntu:latest       "/bin/bash"         28 minutes ago      Exited (0) 44 seconds ago                       unruffled_hoover
    lhf@lhf-virtual-machine:~$ docker container rm unruffled_hoover
    unruffled_hoover
    lhf@lhf-virtual-machine:~$ docker container ls -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    
    
    • -a 的参数让Docker列出所有容器,包括已经停止的状态的容器。

    开发视角

    • 容器及应用
    • 分析一份应用代码的Dockefile并容器化,最终以容器的方式运行。
    $ ll psweb-master/
    总用量 36
    drwxrwxr-x 4 lhf lhf 4096 10月 23 23:11 ./
    drwxrwxr-x 6 lhf lhf 4096 10月 23 23:11 ../
    -rw-rw-r-- 1 lhf lhf  341 10月 23 23:11 app.js
    -rw-rw-r-- 1 lhf lhf  216 10月 23 23:11 circle.yml
    -rw-rw-r-- 1 lhf lhf  338 10月 23 23:11 Dockerfile
    -rw-rw-r-- 1 lhf lhf  421 10月 23 23:11 package.json
    -rw-rw-r-- 1 lhf lhf  370 10月 23 23:11 README.md
    drwxrwxr-x 2 lhf lhf 4096 10月 23 23:11 test/
    drwxrwxr-x 2 lhf lhf 4096 10月 23 23:11 views/
    
    • 查看dockerfile内容
    $ cat Dockerfile 
    # Test web-app to use with Pluralsight courses and Docker Deep Dive book
    # Linux x64
    FROM alpine
    
    LABEL maintainer="nigelpoulton@hotmail.com"
    
    # Install Node and NPM
    RUN apk add --update nodejs nodejs-npm
    
    # Copy app to /src
    COPY . /src
    
    WORKDIR /src
    
    # Install dependencies
    RUN  npm install
    
    EXPOSE 8080
    
    ENTRYPOINT ["node", "./app.js"]
    
    
    • 根据Dockerfile中的指令来创建新的容器
    $ docker  build -t test:latest .
    Sending build context to Docker daemon  10.24kB
    Step 1/8 : FROM alpine
    latest: Pulling from library/alpine
    89d9c30c1d48: Pull complete 
    Digest: sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a
    Status: Downloaded newer image for alpine:latest
     ---> 965ea09ff2eb
    Step 2/8 : LABEL maintainer="nigelpoulton@hotmail.com"
     ---> Running in 75106e6bad84
    Removing intermediate container 75106e6bad84
     ---> 5935d67da60e
    Step 3/8 : RUN apk add --update nodejs nodejs-npm
     ---> Running in 56b0d36a8f41
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
    (1/8) Installing ca-certificates (20190108-r0)
    (2/8) Installing c-ares (1.15.0-r0)
    (3/8) Installing libgcc (8.3.0-r0)
    (4/8) Installing http-parser (2.9.2-r0)
    (5/8) Installing libstdc++ (8.3.0-r0)
    (6/8) Installing libuv (1.29.1-r0)
    (7/8) Installing nodejs (10.16.3-r0)
    (8/8) Installing npm (10.16.3-r0)
    Executing busybox-1.30.1-r2.trigger
    Executing ca-certificates-20190108-r0.trigger
    OK: 59 MiB in 22 packages
    Removing intermediate container 56b0d36a8f41
     ---> dc254500dcda
    Step 4/8 : COPY . /src
     ---> 6c293be80bd1
    Step 5/8 : WORKDIR /src
     ---> Running in ebc1257e0d2c
    Removing intermediate container ebc1257e0d2c
     ---> 4f515774097f
    Step 6/8 : RUN  npm install
     ---> Running in 48bb066e51b2
    npm WARN deprecated superagent@3.8.3: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header).  This notice will go away with v5.0.2+ once it is released.
    npm WARN deprecated json3@3.3.2: Please use the native JSON object instead of JSON 3
    
    > core-js@2.6.10 postinstall /src/node_modules/core-js
    > node postinstall || echo "ignore"
    
    Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
    
    The project needs your help! Please consider supporting of core-js on Open Collective or Patreon: 
    > https://opencollective.com/core-js 
    > https://www.patreon.com/zloirock 
    
    Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)
    
    npm notice created a lockfile as package-lock.json. You should commit this file.
    added 163 packages from 460 contributors and audited 262 packages in 29.419s
    found 5 vulnerabilities (2 low, 2 moderate, 1 critical)
      run `npm audit fix` to fix them, or `npm audit` for details
    Removing intermediate container 48bb066e51b2
     ---> 677c10bc6201
    Step 7/8 : EXPOSE 8080
     ---> Running in 2ab783cd6ca3
    Removing intermediate container 2ab783cd6ca3
     ---> a3656648909c
    Step 8/8 : ENTRYPOINT ["node", "./app.js"]
     ---> Running in 7495a0f5807a
    Removing intermediate container 7495a0f5807a
     ---> e63fd667d16a
    Successfully built e63fd667d16a
    Successfully tagged test:latest
    
    
    • 查看当前镜像
    $ docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    test                latest              e63fd667d16a        About a minute ago   71.4MB
    alpine              latest              965ea09ff2eb        46 hours ago         5.55MB
    ubuntu              latest              cf0f3ca922e0        4 days ago           64.2MB
    
    • 从镜像启动容器,并测试应用
    $ docker container run -d --name web1 --publish 8080:8080 test:latest
    6906f6b41b395cf0e35a1dad541beb827830e8584124ae2e8c723bfc97262570
    
    • 登录网页查看测试
    6.png
    • 将应用代码构建到Dockerfile——docker镜像当中,已容器的方式启动镜像,这个过程叫做“应用容器化”

    相关文章

      网友评论

          本文标题:docker学习(4) DevOps视角

          本文链接:https://www.haomeiwen.com/subject/aiblvctx.html