• Docker 入坑记


    docker 入坑记

    0、介绍

    软件开发最大的麻烦事之一是环境配置。软件执行需要操作系统设置及各种库和组件的安装。

    虚拟机是解决方案之一,但资源占用多、冗余步骤多、启动慢。

    Linux 容器则有启动快、资源占用小、体积小等优点。

     

    Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。是目前最流行的 Linux 容器解决方案。

    Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

    总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。


    1、安装

    https://www.runoob.com/docker/debian-docker-install.html


    2、使用

    2.1、查询docker信息

    $ docker version
    # 或者
    $ docker info

    2.2、 image 文件(镜像)

    Docker 把应用程序及其依赖,打包在 image 文件里面。

    image 文件是容器模板,同一image文件可生成多个容器实例。

    image 文件是通用的,可拷贝到其他机器使用,也可上传到仓库共享。

    # 列出本机的所有 image 文件。
    $ docker image ls

    # 删除 image 文件
    $ docker image rm [imageName]

    2.3、demo 试水

    # 拉官方测试镜像
    $ docker image pull hello-world

    # 查询现有镜像文件
    $ docker image ls

    # 运行镜像文件
    $ docker container run hello-world

    2.4、容器文件

    image 文件生成的容器实例,本身也是一个文件,称为容器文件。

    一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。


    # 列出本机正在运行的容器
    $ docker container ls

    # 列出本机所有容器,包括终止运行的容器
    $ docker container ls --all

    # 终止运行的容器文件,依然会占据硬盘空间,可使用 rm 删除
    $ docker container rm [containerID]

    2.5、Dockerfile 文件

    文本文件,Docker 根据 该文件生成二进制的 image 文件。

    Demo:

    # koa-demos 项目

    # step1
    # 从git下载demo项目
    $ git clone https://github.com/ruanyf/koa-demos.git
    $ cd koa-demos
    # 或手动下载
    https://github.com/ruanyf/koa-demos/archive/master.zip

    # step2
    # 创建 .dockerignore 文件,下面内容不打进包里
    .git
    node_modules
    npm-debug.log

    # step3
    # 创建 Dockerfile 文件,

    #该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
    FROM node:8.4
    # 将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
    COPY . /app
    #指定接下来的工作路径为/app。
    WORKDIR /app
    # 在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
    RUN ["npm", "install"]
    # 将容器 3000 端口暴露出来, 允许外部tcp连接这个端口。
    EXPOSE 3000/tcp

    # step4
    # 创建 image 文件
    $ docker image build -t koa-demo .
    # 或者
    $ docker image build -t koa-demo:0.0.1 .

    #打包好后查看
    $ docker image ls

    # step5
    # 启动对应容器
    $ docker container run -p 8000:3000 -it koa-demo /bin/bash
    # 或者
    $ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
    # -p参数:容器的 3000 端口映射到本机的 8000 端口。
    # -it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
    # koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
    # /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。


    # step6
    # 启动框架
    node demos/01.js
    # 可在dockerfile添加 CMD node demos/01.js 替代

    # 浏览器访问 http://127.0.0.1:8000,网页显示"Not Found",这是因为这个 demo 没有写路由。

    # step7
    # 终止容器与删除容器

    # 在本机的另一个终端窗口,查出容器的 ID
    $ docker container ls
    # 停止指定的容器运行
    $ docker container kill [containerID]

    # 查出容器的 ID
    $ docker container ls --all
    # 删除指定的容器文件
    $ docker container rm [containerID]


    # step 8
    # 发布image 文件

    #登录 hub.docker.com,需要先注册账号
    docker login

    # 本地image 标注用户名和版本号
    $ docker image tag [imageName] [username]/[repository]:[tag]
    # 实例
    $ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1

    # 重新构建image 文件
    $ docker image build -t [username]/[repository]:[tag] .

    # 最后发布 image 文件
    $ docker image push [username]/[repository]:[tag]

    2.5、compose 文件

    Compose 是用于定义和运行多容器 Docker 应用程序的工具。

    通过 Compose,可使用 YML 文件来配置/创建/启动 应用程序需要的所有服务。

    # 下载安装
    curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    chmod +x /usr/local/bin/docker-compose

    ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

    # 测试
    docker-compose --version

    # 使用
    # 待补充。。
     

    3、其他指令

    • 启动容器

      docker container run命令是新建容器,每运行一次,就会新建一个容器;复用容器则用start指令

    $ docker container start [containerID]
    • 停止容器

      docker container kill命令终止容器运行,相当于向容器里面的主进程发出 SIGKILL 信号

      docker container stop相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号

    $ bash container stop [containerID]
    • 查看容器输出

    docker container logs命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出

    $ docker container logs [containerID]
    • 进入容器

    docker container exec命令用于进入一个正在运行的 docker 容器

    $ docker container exec -it [containerID] /bin/bash
    • 拷贝容器文件到本机

    $ docker container cp [containID]:[/path/to/file] .
    • 导入导出容器

    # 导出容器(制作基础镜像)
    $ docker export [containID] > [repository].tar

    # 导入容器
    $ cat [username]/[repository].tar | docker import - [username]/[repository]

    # 导出镜像(无网络下多个镜像组合)
    $ docker save [imageID] > [repository].tar

    # 导入镜像
    $ docker load < [repository].tar

    • 获取镜像

    docker pull [repository]

    4、mysql部署

    # 拉取mysql镜像
    $ docker pull mysql:8.0.22    
    # 查看是否获取mysql镜像
    $ docker images

    # 运行容器
    $ docker run --name mysql-test --privileged=true -p 3308:3306  -v /data/mysql/datadir:/var/lib/mysql -e  MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.22

    # 进入容器
    $ docker exec -it study_mysql /bin/bash  

    # 连接 MySQL
    $ mysql -u root -p

    # 修改root 授权
    $ ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

    # 可用宿主机或远程客户端工具访问
    $ mysql -h 127.0.0.1 -P 3308 -u root -p

    参考

    http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

    https://blog.csdn.net/skh2015java/article/details/82659688

    https://www.runoob.com/docker/docker-compose.html

    https://www.hangge.com/blog/cache/detail_2411.html

  • 相关阅读:
    poj 1067||hdu 1527 取石子游戏(博弈论,Wythoff Game)
    CGAffineTransform属性
    自定义UITabBarController
    UISwitch用法:
    UIButton常见属性和方法
    xcode添加背景音乐/音效
    使用cocoaPods加载框架的具体步骤:
    UILabel
    NSString -- UILabel中字体有多种颜色,字符串自动计算高度/换行
    xcode 修改类名 变量名
  • 原文地址:https://www.cnblogs.com/GO-NO-1/p/14049863.html
Copyright © 2020-2023  润新知