docker,就是学不会(一)

2020-02-25  本文已影响0人  晴晴要努力

一. 介绍
Docker 是一个开源的应用容器引擎,经常与k8s一起使用。我看了好多遍docker还是记不住,所以记录一下。
二. Docker应用场景

  1. Web 应用的自动化打包和发布。
  2. 自动化测试和持续集成、发布。
  3. 在服务型环境中部署和调整数据库或其他的后台应用。
  4. 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
    三. Docker架构
    1.镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    2.容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    3.仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
    四.操作步骤
  5. MacOS Docker 安装 (请选择合适的操作系统安装)
    (1)brew cask install docker (2) 镜像加速 对于使用 Mac OS X 的用户,下载docker App后,在任务栏点击 Docker for mac 应用图标-> Perferences...-> Daemon-> Registrymirrors。在列表中填写加速器地址 https://registry.docker-cn.com 。修改完成之后,点击 Apply&Restart 按钮,Docker 就会重启并应用配置的镜像地址了。 tips: 国内加速器服务 a.Docker官方提供的中国镜像库:https://registry.docker-cn.com b.七牛云加速器:https://reg-mirror.qiniu.com 五. 正式进入使用 1.docker run image command => docker 执行image镜像 在容器(docker run 组成一个容器)里执行command命令 egs: docker run ubuntu:15.10 /bin/echo "Hello world"
    Hello world
    Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
  6. 对话能力 docker run -i -t ubuntu:15.10 /bin/bash
    -t: 在新容器内指定一个伪终端或终端。
    -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
    执行后的环境为linux系统,可以执行linux命令。
    3.退出容器
    (1)exit
    (2)ctrl+D (mac: command +D )
    (3)停止容器 docker stop 容器ID| 容器Name(随机分配)
    4.启动容器(后台模式)
    docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    输出容器ID(唯一)
  7. docker ps (查看docker运行中的容器状态)docker ps -a (查看所有容器 包含已停止运行)
    6.docker logs 容器ID| 容器Name(随机分配) 可以查看 当前容器运行的log日志
    7.容器 container 相关
    (1) docker pull image 如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像
    (2) 启动已停止运行的容器 docker start 容器ID
    (3) 重启 docker start 容器ID
    (4) 容器后台运行 docker run -d image command //-d 参数默认不会进入容器
    (5) 使用-d之后,会自动进入后台。想要进入容器
    【docker exec :在运行的容器中执行命令
    语法
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    OPTIONS说明:
    -d :分离模式: 在后台运行
    -i :即使没有附加也保持STDIN 打开
    -t :分配一个伪终端
    实例
    在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本:
    $ docker exec -it mynginx /bin/sh /root/runoob.sh
    http://www.runoob.com/
    docker attach + 容器ID
    docker exec + 执行命令(-i|t|d) 容器ID //推荐,因为此命令退出容器终端,不会导致容器的停止。
    (6) 导出容器 docker export +容器ID > export_name //导出容器 容器ID 快照到本地文件 ubuntu.tar(export_name)。
    (7)导入容器快照
    cat docker/ubuntu.tar | docker import - test/ubuntu:v1 //将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1
    (8) docker rm -f 1e560fca3906 //docker删除Id:1e560fca3906的容器
    (9) docker container prune //清理掉所有处于终止状态的容器。
    (10) 指定端口号映射
    docker run -d -P training/webapp python app.py //在webapp上运行app.py文件
    -P:将容器内部使用的网络端口映射到我们使用的主机上。
    -p: 是指定端口 大小写不一样 还可以指定 容器的网络地址
    -p 5000:5000 || -p 127.0.0.1:5000:5000 两种写法
    默认绑定都是tcp端口,如果需要绑定udp端口 -p 127.0.0.1:5000:5000/udp
    image.png
image.png

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。


image.png

如果需要指定端口号
docker run -d -p 5000:5000 training/webapp python app.py //指定本地的端口号5000


image.png

页面效果:


image.png

查看指定容器的端口映射
docker port 容器ID | 容器Name


image.png

(11) 查看应用日志

image.png
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。 (现在不清楚 tail -f是什么意思)
(12) 查看容器的进程 docker top 容器ID || 容器Name
(13) 查看Docker 容器的配置和状态信息 docker inspect 容器ID || 容器Name
(14) 查询最后一次创建的容器:docker ps -l
(15) 重启已经停止的容器 docker start 容器ID || 容器Name
(16) 重启已经停止的容器 docker restart 容器ID || 容器Name
(17) 移除容器(只能移除停止状态的容器)docker rm 容器ID || 容器Name
(18) 容器互联 后续可以用docker compose 来管理依赖关系
docker run -d -P --name runoob training/webapp python app.py // --name runoob 指定runoob为此容器name
新建网络 docker network create -d bridge test-net
-d:参数指定 Docker 网络类型,有 bridge、overlay。
查看当前网络列表 docker network ls
分别创建2个容器
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
安装 ping :
apt-get update
apt install iputils-ping
进入test1容器,ping test2 有回应。test1 容器和 test2 容器建立了互联关系。
(19) 容器配置dns 感觉目前用不到 先不看了
(20) docker rm (docker ps -q)
删除所有容器
docker rm $(docker ps -aq)
  1. image 镜像相关命令
    (1) 查看本地主机上的镜像 docker images
    (2) 查找镜像 docker search +keyword //会搜索出来和keyword相关的镜像。默认pull下来的是latest更新。
    (3) 删除镜像 docker rmi image
    (4) 创建镜像 当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
    1、从已经创建的容器中更新镜像,并且提交这个镜像 在运行的容器内使用 apt-get update 命令进行更新
    当更新后的符合需求的镜像,我们可以提交容器副本。
    docker commit -m="has update(描述)" -a="creator(坐着)" 容器ID runoob/ubuntu:v2(指定要创建的目标镜像名)
    2、使用 Dockerfile 指令来创建一个新的镜像. 使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
    docker build -t runoob/centos:6.7 .
    -t :指定要创建的目标镜像名
    "." :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
    runoob/centos:6.7 :新起的容器Name(可以通过 docker run -it runoob/centos:6.7 command 去创建容器)
    (5) 设置镜像标签 docker tag 860c279d2fec runoob/centos:dev //给容器ID为860c279d2fec的runoob/centos这个镜像 新增dev标签。

六. 踩到的坑及解决办法
1."Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?"

image.png
这个坑, 百度说是上次docker未正常关闭导致,解决办法:
sudo service docker restart
sudo docker run hello-world

然而,直接报错


image.png

然后找了很久,发现本机的docker app没有运行,打开 docker就好了。

太多了 先写这么多 仓库管理 单独写。====晴晴要努力鸭

上一篇下一篇

猜你喜欢

热点阅读