docker教程系列二

Posted 河畔的风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker教程系列二相关的知识,希望对你有一定的参考价值。

导航

  • docker概念
  • 手动从镜像运行一个容器
  • 使用dockerfile打包镜像
  • 使用compose部署多容器应用
  • 给docker加上数据持久
  • docker在服务器部署
  • docker持续集成和部署

手动从镜像运行一个容器

手动启动一个容器

手动在本地电脑的docker容器中运行一个web应用

``` sh
    # 下面的命令启动一个docker容器
    docker run -d -t -p 8000:5000 --name demo ubuntu:18.04

    # 这条命令的解释
    -d 的意思是让容器在后台运行
    -t 极少能用到,用于让一个空白的Ubuntu镜像在后台运行
    -p 用于指定端口映射,表示在本机访问8000会被自动转到容器中5000端口
       必须保证本机没有其他应用程序占用了8000端口,否则这里会失败
    --name demo 制定了容器的名字是demo
    ubuntu:18.04 是启动容器时用的镜像名, docker会自动从镜像服务器去下载这个镜像
```

启动容器常见的问题

    # 启动一个端口为3456的进程
    docker run -t -d -p 3456:5000 --name test ubuntu:18.04
    # 报错1,端口被占用,删除test容器来不安比3456端口的占用
    docker rm -f test
    # 报错2,名字已存在, 那么改名字, 也可以用上面的删除容器命令
    docker run -t -d -p 3456:5000 --name test1 ubuntu:18.04

关于容器相关的命令

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

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

    # 查看正在运行的容器
    docker ps

    # 查看最新指定数量的容器的状态
    docker ps -n 10

    # 终止容器
    docker stop <container id>/<container name>

    # 对终止运行的容器重启, 容器id通过docker ps查询
    docker start <container id>/<container name>

    # 查看容器日志
    docker logs <container id>/<container name

在容器中安装必备软件

启动容器以后,说明了运行了一个镜像实例,比如ubuntu:18.04镜像生成的test容器。这个容器目前有了ubuntu操作系统的文件管理功能,内存管理功能,进程调度等功能。现在还需要拥有python3, pip 环境, apt工具包。

```sh
    docker run -d -t -p 8000:5000 --name unbuntu:18.04
    # 下载apt工具包
    docker exec demo apt update
    docker exec apt -y install python3 python3-pip
    # 安装flask库
    docker exec demo pip3 install flask
```

在容器中运行程序

上面说过,使用docker的目的就是软件应用带环境安装。现在环境好了,需要运行软件应用

```sh
    # demo 容器中创建/code目录
    docker exec demo mkdir /code
    # cp参数把当前文件夹的a.py拷贝到demo容器的/code/a.py
    docker cp a.py demo:/code/a.py
    # 运行demo容器中的a.py
    docker exec demo python3 /code/a.py
```

用脚本的方式配置容器,然后运行脚本配置并开启新容器

之前的一系列命令有些繁琐, 其实更好的方式是在宿主机写脚本,然后cp到docker容器中直接运行.
具体操作看实例操作

实例操作

  1. 在当前目录下创建a.py文件

     from flask import Flask
    
     app = Flask(__name__)
    
     @app.route(\'/\')
     def index():
         return \'Hello from Docker\'
    
     # 默认端口5000
     if __name__ == "__main__":
         app.run(host="0.0.0.0", debug=True)
  2. 在当前目录下创建install.sh文件

     # install.sh
     apt update
     apt -y install python3 python3-pip
     pip3 install flask
  3. 在当前目录下创建run.sh文件

     # run.sh
     cd /code
     python3 a.py
  4. 打开终端,输入以下命令

     docker run -d -t -p 8000:5000 --name unbuntu:18.04
     # demo 容器中创建/code目录
     docker exec demo mkdir /code
     docker cp install.sh "demo:/code/install.sh"
     docker cp run.sh "demo:/code/run.sh"
     docker cp a.py "demo:/code/a.py"
     docker exec demo bash /code/install.sh
     docker exec demo bash /code/run.sh
  5. 打开浏览器输入:localhost:8000/

以上是关于docker教程系列二的主要内容,如果未能解决你的问题,请参考以下文章

docker教程系列一

docker教程系列五

docker教程系列四

docker教程系列三

docker系列教程02---镜像和容器

Docker 系列教程