关于docker:docker起步

109次阅读

共计 7790 个字符,预计需要花费 20 分钟才能阅读完成。

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 入门

正文完
 0