乐趣区

关于docker:docker起步

docker 长处

  1. 更疾速交付部署
  2. 更便捷的降级和扩容缩容
  3. 更简略的零碎运维
  4. 更高效的计算资源利用

    docker 组成

  5. client 客户端
  6. 镜像生成容器 镜像好比一个模板
  7. 容器 container docker 利用容器技术,独立运行一组利用,通过镜像创立
  8. 仓库 repository 仓库是寄存镜像的,分共有仓库和公有仓库

linux docker

  • uname -r 零碎内核信息
  • docker version 查看 docker 版本信息
  • docker info 查看 docker 零碎信息
  • docker 命令 –hele 帮忙信息。eg:docker run –help
  • docker images 查看本机所有镜像列表
    • -a 列出所以
    • -f 格式化
    • -q 只显示镜像 id
  • docker search 搜寻镜像
    • –filter 过滤条件,应用形式看上面 code
  • code

    ➜  ~ docker search mysql --filter=STARS=5000
    NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql     MySQL is a widely used, open-source relation…   10917     [OK]       
    
    docker pull 下载镜像。
  • eg:docker pulll mysql[:TAG] TAG 示意版本号,可选默认 latest
  • # 因为本地曾经装置,返回如下信息
    ➜  ~ docker pull mysql:5.7
    5.7: Pulling from library/mysql
    Digest: sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa
    Status: Image is up to date for mysql:5.7
    docker.io/library/mysql:5.7
    docker rmi 删除镜像。eg docker rmi 镜像 ID 或者名称
    • -f 强制删除
  • # 一般删除,有运行中的 MySQL5.7 容器会报错不让删除
    ➜  ~ docker rmi mysql:5.7
    # 强制删除 < 少用 >
    ➜  ~ docker rmi -f mysql:5.7
    
    #删除所有镜像 < 少用 >
    ➜  ~ docker rmi -f $(docker images -qa)
    docker run 应用镜像生成容器
    • –name 指定容器名字
    • -d 后盾运行
    • -it 应用交互方式运行
    • -p 执行端口
    • -P 随机指定端口
  • docker run -p 特地阐明
    • -p 容器端口(不对外拜访)
    • -p 宿主机端口: 容器端口(罕用,对外拜访)
    • -p ip: 宿主机端口: 容器端口
  • code 请手敲实例
# 启动并进入容器
➜  ~ docker run -it centos /bin/bash
# 退出容器
[root@c540d3ba3402 /]# exit
exit
# 此时无运行中的容器,起因在于没加 -d
➜  ~ docker ps                      
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
➜  ~ 
  • docker run 过程

    docker ps 查看以后正在运行的容器
    • -a 查看全副容器包含已经运行的
    • -n=? 显示最近几个创立的容器
    • -q 只显示容器的 ID

      docker rm 容器 ID,不能够删除运行中的容器加 - f 可强制删除
    • -f 强制删除
# 强制删除所有容器
docker rm -f $(docker ps -qa)
  • exit 退出容器。command+q+ p 在 win 行在 Mac 不行,mac 中 command+ q 是退出的意思

    容器启动和进行
  • docker start 容器 id
  • docker stop 容器 id
  • docker restart 容器 id
  • docker kill 容器 id 强制删除
docker logs 容器 id 查看日志
  • docker logs
    • -ft 格局和工夫戳
    • –tail 指定显示行数
  • code
# 此处是容器内日志记录
➜  ~ docker logs -f -t --tail=100 ec541aeb7188
2021-05-27T03:33:47.291293040Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
2021-05-27T03:33:47.291339292Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
2021-05-27T03:33:47.292302613Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
2021-05-27T03:33:47.295570523Z 10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf is not a file or does not exist
2021-05-27T03:33:47.297453674Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
2021-05-27T03:33:47.305607832Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
2021-05-27T03:33:47.308121066Z /docker-entrypoint.sh: Configuration complete; ready for start up
2021-05-27T03:33:47.313641771Z 2021/05/27 03:33:47 [emerg] 1#1: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
2021-05-27T03:33:47.313673756Z nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
查看容器内过程信息
  • docker top 容器 id

    ➜  ~ docker top 38497d83ef06
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                2020                1994                0                   03:56               ?                   00:00:00            nginx: master process nginx -g daemon off;
    uuidd               2073                2020                0                   03:56               ?                   00:00:00            nginx: worker process
    
    查看容器整体的信息
  • docker inspect 容器 id

    ➜  ~ docker inspect 38497d83ef06
    [
      {
          "Id": "38497d83ef06bac45fcdee58c7031173d96b5de0bb3b55a7c35b02e12b3b58f2",
          "Created": "2021-05-26T09:23:46.580435747Z",
          "Path": "/docker-entrypoint.sh",
          "Args": [
              "nginx",
              "-g",
              "daemon off;"
          ],
          "State": {
              "Status": "running",
              "Running": true,
              "Paused": false,
              "Restarting": false,
              "OOMKilled": false,
              "Dead": false,
              "Pid": 2020,
              "ExitCode": 0,
              "Error": "","StartedAt":"2021-05-27T03:56:59.828700511Z","FinishedAt":"2021-05-26T09:57:15.10854176Z"
          },
    ........
    进入以后正在运行的容器
  • docker exec -it 容器 id /bin/bash
  • docekr attach 容器 id

    # exec 进入
    ➜  ~ docker exec -it 38497d83ef06 /bin/bash
    root@38497d83ef06:/#
    # attach 进入。Mac 下执行该命令有问题
    ➜  ~ docker attach 38497d83ef06
  • 区别:exec 调用新终端,attach 进入正在执行的终端

    从容器内 copy 文件到宿主机上
  • docker cp 容器 id: 容器内门路 宿主机目标门路
  • 在 docker 容器进行也不影响复制

    # 复制文件
    ➜  ~ docker cp 38497d83ef06:/etc/nginx /Users/dada/Downloads/docker-centos/nginx/conf
    ➜  ~ 
    

    练习 1 装置 NGINX

    # 搜寻 NGINX
    ➜  ~ docker search nginx
    NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    nginx                              Official build of Nginx.                        14925     [OK]       
    jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   2031                 [OK]
    .......
    # 下载 NGINX 镜像
    ➜  ~ docker pull nginx
    Using default tag: latest
    latest: Pulling from library/nginx
    69692152171a: Already exists 
    30afc0b18f67: Pull complete 
    596b1d696923: Pull complete 
    febe5bd23e98: Pull complete 
    8283eee92e2f: Waiting 
    .........
    
    # 查看镜像
    ➜  ~ docker images | grep nginx
    nginx             latest    f0b8a9a54136   2 weeks ago     133MB
    
    # 启动容器
    ➜  ~ docker run -it -d --name nginx08 -p 8080:80 nginx:latest
    77953516c7f1930f4b6660cc487009a2fdba11767937797c2db2c1b4686b7e35
    # 查看一下
    ➜  ~ docker ps
    CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                   NAMES
    77953516c7f1   nginx:latest   "/docker-entrypoint.…"   4 seconds ago   Up 2 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx08
    # 查看启动是否胜利,也能够应用浏览器查看
    ➜  ~ curl http://127.0.0.1:8080
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
      body {
          width: 35em;
          margin: 0 auto;
          font-family: Tahoma, Verdana, Arial, sans-serif;
      }
    </style>
    .......
    
    # 进入容器
    ➜  ~ docker exec -it 77953516c7f1 /bin/bash
    root@77953516c7f1:/# exit
  • 配置文件和我的项目目录须要怎么解决?(-v volume)

    练习 2 Tomcat 配置

➜  ~ docker search tomcat
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   3036      [OK]
.......

# 下载 Tomcat 镜像
➜  ~ docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
Digest: sha256:10842dab06b5e52233ad977d4689522d4fbaa9c21e6df387d7a530e02316fb45
Status: Image is up to date for tomcat:latest
docker.io/library/tomcat:latest

# 查看本地的 tomcat 镜像
➜  ~ docker images |grep tomcat
tomcat            9.0       c43a65faae57   13 days ago     667MB
tomcat            latest    c43a65faae57   13 days ago     667MB

# 启动容器
➜  ~ docker run -d -p 8081:8080 --name tomcat05 tomcat:latest
ed03ac03c1617ed79b9a2ea491535529659416551a24e3a665f0119a7f137af0

# 拜访测试 报错 404,因为 webapps 中文件夹空,须要复制一下
➜  ~ curl http://127.0.0.1:8081
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body
......

#查看容器列表
➜  ~ docker ps       
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                       NAMES
ed03ac03c161   tomcat:latest   "catalina.sh run"        50 seconds ago   Up 48 seconds   0.0.0.0:8081->8080/tcp, :::8081->8080/tcp   tomcat05

# 进入容器并进行赋值文件
➜  ~ docker exec -it ed03ac03c161 /bin/bash 
root@ed03ac03c161:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE    NOTICE    README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@ed03ac03c161:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@ed03ac03c161:/usr/local/tomcat# exit
exit

# 再次拜访地址,返回失常 200。也能够
➜  ~ curl http://127.0.0.1:8081            
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/9.0.46</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>
........
  • 同样文件目录和配置文件须要进入容器批改比拟麻烦,前面学习 volume 就能够解决

    练习 3 docker 可视化

  • 练习一下,不举荐应用
  • portainer
  • 此处的例子我间接 run,docker 会主动下载镜像并启动

    # 启动 portainer
    ➜  ~ docker run -d -p 8082:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
    Unable to find image 'portainer/portainer:latest' locally
    latest: Pulling from portainer/portainer
    94cfa856b2b1: Downloading 
    49d59ee0881a: Waiting 
    a2300fd28637: Waiting 
    latest: Pulling from portainer/portainer
    94cfa856b2b1: Pull complete 
    49d59ee0881a: Pull complete 
    a2300fd28637: Pull complete 
    Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
    Status: Downloaded newer image for portainer/portainer:latest
    a5b72d5c2714e44b81143d71a6ba3c4becc1e0d4dc422ecac4c6088a87e813f4
    
    浏览器中拜访 http://127.0.0.1:8082 进行登录注册即可,抉择 local docker 进行治理
    

    如何失去镜像

  • 从远端 hub 下载,docker pull
  • 从敌人处 copy
  • 本人制作一个镜像 image。commit 或者 dockerfile 形式

    UnionFS(联结文件系统)

    docker 文件是分 layer 的,一层一层的。
    bootfs(boot file system)疏导加载的,加载实现会删除
    rootfs(root file system)指的是各种操作系统,乌班图,centos 等

    docker 镜像只读

    docker 镜像只读,当容器启动时,一个新的能够容器层被加载到镜像层顶部。如图

容器层
镜像层

commit 镜像

  • docker commit 提交容器成为一个正本(镜像)
    docker commit -m=” 提交形容 ” -a=” 作者信息 ” 容器 id 镜像名称:[TAG]
    TAG 为版本号可选
  • 站在岸上学不会游泳,请手敲例子
  • code
# 启动 Tomcat
➜  ~ docker run -it -d -p 8080:8080 --name tomcat04 tomcat:9.0

#获取运行中容器列表
➜  ~ docker ps 

CONTAINER ID   IMAGE        COMMAND             CREATED         STATUS          PORTS                                       NAMES
d5e936f9fe5d   tomcat:9.0   "catalina.sh run"   2 minutes ago   Up 10 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   tomcat04

#此时拜访
➜  ~ curl http:127.0.0.1:8080 
返回 404
#进入容器
➜  ~ docker exec -it d5e936f9fe5d /bin/bash

#进行文件复制 webapps.dist to webapps
➜  ~ cp -r webapps.dist/* webapps

#再次拜访
➜  ~ curl http:127.0.0.1:8080 
返回 OK

#commit 生成镜像
➜  ~ docker commit -a="smallForest" -m="add webapps files" d5e936f9fe5d tomcat04:1.0

#查看所有镜像列表
➜  ~ docker images |grep tomcat
tomcat04                             1.0                                                     6961daa4ae47   12 seconds ago   672MB
tomcat                               9.0                                                     c43a65faae57   12 days ago      667MB
tomcat                               latest                                                  c43a65faae57   12 days ago      667MB

学完以上课程算 docker 入门

退出移动版