docker

Docker 是一个开源的应用容器引擎, 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

参考
参考
参考
dockerhub

安装

安装docker

  • 更新ubuntu的apt源索引
    sudo apt-get update
  • 安装包允许apt通过HTTPS使用仓库

    1
    2
    3
    4
    5
    sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
  • 添加Docker官方GPG key
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  • 设置Docker稳定版仓库

    1
    2
    3
    4
    sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
  • 添加仓库后,更新apt源索引
    sudo apt-get update

  • 安装最新版Docker CE(社区版)
    sudo apt-get install docker-ce
  • 检查Docker CE是否安装正确
    sudo docker run hello-world

配置国内源

参考

支持gpu

  • 安装 nvidia-container-toolkit

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sudo curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
    sudo apt-key add -
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    sudo curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
    sudo apt-get update

    apt-get install nvidia-container-runtime

    systemctl restart docker
  • 查看
    $which nvidia-container-runtime-hook

  • 验证下-gpus选项
    1
    2
    $docker run --help | grep -i gpus
    --gpus gpu-request GPU devices to add to the container ('all' to pass all GPUs)

添加到docker用户组

  • 将当前用户加入到docker组中
    sudo gpasswd -a $USER docker
  • 将当前用户切换到docker组中
    newgrp - docker

命令

容器

运行容器
docker run -d -P training/webapp python app.py
-d 后台运行
-P 自动映射端口
-p 指定端口 #-p 5000:5000

运行利用GPU的Ubuntu容器
$ docker run -it --gpus all ubuntu nvidia-smi

示例:
docker run --name my_container -p 8080:80 -v /path/to/host/directory:/path/in/container image_name

查看容器
docker ps #查看运行容器
docker ps -a #查看所有容器
停止容器
docker stop id/name
重启容器
docker start id/name
删除容器
docker rm id/name

附着容器

  • 附着到正在运行的容器
    docker attach
    退出容器,不结束运行需要分别按下Ctrl+pCtrl+q

  • 进入正在运行的容器内部,同时运行bash(比attach更好用)
    docker exec -it /bin/bash

容器保存为镜像
docker commit my_container my_new_image:v1.0
执行这个命令后,my_container容器的当前状态将会被保存为一个新的Docker镜像,名为my_new_image,标签为v1.0

镜像

1
2
3
4
$ docker images  #列出本地镜像
$ docker pull ubuntu:13.10 #获取新镜像
$ docker inspect <镜像名/镜像id> #查看镜像的详细信息
$ docker rmi 镜像名 #删除镜像
  • 将镜像保存到本地
    docker save -o nginx.tar nginx:latest
  • 加载本地镜像
    docker load -i nginx.tar

docker commit镜像越来越大的问题

通过docker system df -v可以查看容器的大小,但是commit之后会变的非常大。

直接打包容器,之后再通过import为镜像

1
2
docker export -o container.tar 容器id  
docker import container.tar 镜像名:v1

通过这种方法打包后,镜像确实很小了很多,但是在docker run时会提示“docker: Error response from daemon: No command specified”的错误。

解决方案:
获取command

1
docker ps -a --no-trunc

可以看到最后的command “/bin/bash”,将其加到docker run 最后。

实例安装

gitlab

参考

  • 拉取镜像
    docker pull gitlab/gitlab-ce
  • 创建容器
    docker run --detach --publish 10443:443 --publish 1080:80 --publish 1022:22 --name gitlab --restart always --volume /home/gitlab/config:/etc/gitlab --volume /home/gitlab/logs:/var/log/gitlab --volume /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest

overleaf

nextcloud

  • 拉取镜像
    docker pull nextcloud
  • 创建容器
    docker run -idt -p 8888:80 -v /home/nextcloud:/var/www/html/data --name nextcloud nextcloud
Contents
  1. 1. 安装
    1. 1.1. 安装docker
    2. 1.2. 配置国内源
    3. 1.3. 支持gpu
  2. 2. 添加到docker用户组
  3. 3. 命令
    1. 3.1. 容器
    2. 3.2. 镜像
    3. 3.3. docker commit镜像越来越大的问题
  4. 4. 实例安装
    1. 4.1. gitlab
    2. 4.2. overleaf
    3. 4.3. nextcloud
|