docker的使用-以nodebb linux docker为例

发布于 2022-05-31  3909 次阅读


安装docker并启动

    运行下面和docker有关的服务时都应先启动docker 否则会报错

    启动docker服务

    sudo systemctl start docker

    将docker服务设置为开机启动

    sudo systemctl enable docker

    创建所需的 docker 网络

    docker network create net_name
    net_name为网络名

拉取镜像以及运行容器

    拉取镜像

    docker pull docker_image_name

      拉取名称为docker_image_name的镜像

    拉取mongo镜像和nodebb镜像后根据镜像运行这两个容器

    运行mongo容器

    docker run --name mongo --restart always --network mongo-net -d mongo --wiredTigerCacheSizeGB 0.25

      docker run 运行容器
      --name 给该进程起名
      --restart always 表示程序如果死掉就自动重新启动 ,守护进程
      -d :后台运行,后面的参数为镜像名
      mongo 镜像名
      --wiredTigerCacheSizeGB 0.25 设置最大的内存使用为 0.25G

    运行nodebb容器

    docker run --restart always --name nodebb --network mongo-net -p 4567:4567 -d nodebb/docker

      -p 将本地的4567端口映射到容器的4567端口(本地端口:容器端口)
      --network mongo-net 给这个容器指定一个虚拟网络,不存在则报错,存在则加入这个网络

基本运维指令

    查看容器的运行情况

    docker ps -a

    进入容器内命令行交互

    docker exec -it 容器ID/容器名 bash

    查看所有网络列表

    docker network ls

如果想要建立一个自己的镜像

    先建立一个Dockerfile文件 以一个python应用程序举例

    # 基于镜像基础
    #FROM python:3.6
    FROM python:3.6-slim-stretch #有更小的体积,上面环境的依赖大约为1GB,该依赖只有不到100MB
    # 维护者信息
    MAINTAINER docker_user docker_user@email.com
    # 复制当前代码文件到容器中 /app
    ADD . /app
    # 设置容器时间,有的容器时区与我们的时区不同,可能会带来麻烦
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
    # 设置语言为utf-8
    ENV LANG C.UTF-8
    # 设置工作目录,也就是下面执行 ENTRYPOINT 后面命令的路径
    WORKDIR /code/bdtools
    # 设置app文件夹是工作目录 /app
    WORKDIR /app
    #解决Dockers中打印日志不及时的问题
    ENV PYTHONUNBUFFERED=0
    # 安装所需的包,默认为使用python官方镜像源,安装 比较慢
    #RUN pip install -r requirements.txt
    #可以修改为清华源
    RUN pip install -r requirements.txt - i https://pypi.tuna.tsinghua.edu.cn/simple
    EXPOSE 7777
    # EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。
    # 此处填写7777,是因为我们上面的app.py提供的web服务就需要使用7777端口
    # Run test.py when the container launches
    CMD ["python", "/app/test/test.py"]
    ENTRYPOINT ["python3","app.py"]
    

    切换到Dockerfile所在目录,运行
    docker build -t docker_image_name .
    docker_image_name为docker镜像的名字
    如果没有问题,该docker会加入系统的docker列表中
    使用docker images查看所有镜像

导出镜像或容器

    导出镜像

      docker save -o docker.tar docker_image_name:latest

      docker save > docker.tar nginx:latest
      其中-o和>表示输出到文件,docker.tar为目标文件,docker_image_name:latest是源镜像名(name:tag)
      从导出镜像中载入
      示例
      docker load -i docker.tar

      docker load < docker.tar
      其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

    导出容器

      docker export docker_name/docker_id > docker.tar
      docker_name/docker_id为docker容器的名字或者id

    导入由容器导出的镜像

      docker import - docker_image_name < docker.tar
      docker_image_name为导入后docker镜像的名字

快速搭建nodebb环境

    可以使用别人搭建好的一键脚本
    需要事先安装好docker以及docker-compose

    docker和docker-compose的一键安装脚本

    git clone https://github.com/luckman666/shell_scripts.git
    cd shell_scripts && chmod -R 755 .
    ./deploy_docker_and_composes.sh
        

    nodebb一键安装脚本

    git clone https://github.com/luckman666/nodebb.git
    cd nodebb
    docker-compose up -d
        

    nodebb安装过程需要先配置好nodebb数据库
    先进入mongodb容器
    输入$mongo进入命令行
    可以先在admin数据库中设置数据库的root密码
    > use nodebb 进入nodebb数据库,若无该数据库则先创建再进入
    添加访问 nodebb 数据库的用户,输入:

    db.createUser( { user: "nodebb",
    ... pwd: "<输入密码>",
    ... roles: [ "dbAdmin" ] } )
        

    若未改变参数 nodebb初始化界面的用户名应填写nodebb,密码为输入的密码
    roles为权限参数 readWrite 将制定数据库的读或写任何集合(collection)的权限付给用户。
    由于某些插件需要修改数据库,所以建议将权限设置为dbAdmin
    docker容器文件位置一般在实体机目录的/var/lib/docker/overlay2/中

最后更新于 2022-05-31