Docker 安装和使用

此部分主要参考Docker官方文档:https://docs.docker.com/engine/install/ubuntu/
Ubuntu Docker安装

bug: Get Permission Denied

原因
摘自docker mannual上的一段话

Manage Docker as a non-root user

The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.

If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

  1. 使用sudo获取管理员权限,运行docker命令

    #如下命令可以正常执行
    sudo docker run ubuntu:15.10 /bin/echo "Hello world"
    
  2. docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令。

    sudo groupadd docker     #添加docker用户组
    sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
    newgrp docker     #更新用户组
    docker ps    #测试docker命令是否可以使用sudo正常使用
    

    搜索可用镜像

    docker search anaconda
    

    拉取你中意的镜像

    docker pull continuumio/anaconda3
    

    我这里因为要存储conda的环境,所以我pull的是anaconda,也可以搜索到其他的docker的环境,例如

    docker pull ubuntu:18.4 # 18.4为版本号
    

    启动该镜像并且运行bash命令:

    docker run -it continuumio/anaconda3 /bin/bash
    

    记新打包成的镜像名为new_anaconda

    sudo -s
    docker pull continuumio/anaconda3
    docker run -it --name new_anaconda continuumio/anaconda3 /bin/bash
    

    激活new_anaconda

    docker start new_anaconda
    

    进入new_anaconda

    docker contain new_anaconda
    
    • 执行whereis anaconda可知容器中anaconda的路径为/opt/conda/envs 在查找到的anaconda路径下,创建新的为env的路径 cd /opt/conda/envs,此时还没有创建环境,ls为空。
      新建一个终端,查找到系统内安装的anaconda3环境路径,一般在your_anaconda3_path/envs,这里有你创建好的环境。
    • 通过docker cp指令,将系统中的环境全部复制到docker的anaconda3环境路径下,此时docker中的anaconda已经可以使用配好的环境了,可以用 source activate 指令自行证实一下。
    docker cp your_anaconda3_path/envs/envs_name container_name:/opt/conda/envs `
    
    • 记导出的镜像名字为new_anaconda_image
    docker commit new_anaconda new_anaconda_image
    docker save new_anaconda_image -o new_anaconda_image.tar
     

    注意:一定要导出为.tar文件格式

    • 在新服务器上导入镜像
    sudo -s
    docker load < new_anaconda_image.tar
    

    修改docker container名字

    后面push的时候需要修改,这里先不管。

    上传image到docker hub

    1. 注册docker hub:https://hub.docker.com/
    2. 把 Docker Image Push 到 Docker Hub 上
      打開 terminal 輸入docker images,畫面如下:
      在这里插入图片描述
      要把 Docker Image Push 到 Docker Hub 上,需要把 Docker Image 加上 tag,如下指令:
    $ docker tag mytomcat jackyohhub/mytomcat
    

    使用的Docker tag格式如下:
    docker tag ${Image Name} DockerHub帳號/Image Name
    執行結果的畫面如下:
    在这里插入图片描述 3. 輸入docker login指令登入到 Docker Hub
    4. 使用 docker push 指令把 Docker Image Push 到 Docker Hub。

    把docker pull下来

    $ docker pull jackyohhub/mytomcat
    

    啟動 Docker Container,指令如下

    docker run -p 8080:8080 jackyohhub/mytomcat
    

    啟動完成之後就可以使用 Browser 查看結果,輸入 URL 位址為 http://localhost:8080 可以看到是否成功。

    1. 记录一次将本地的基于Anaconda的Pytorch开发环境打包成Docker镜像并迁移到其他服务器上的全过程
    2. 如何将anaconda中的环境封装成docker
    3. Day6:把 Docker Image Push 到 Docker Hub

    容器化现有的conda环境 我使用conda环境来进行数据分析项目。 有时,如果软件包不在biocondaconda-forge上,则需要恢复使用pip或R的install.packages进行安装。 这使得很难在另一个系统上重现环境以及分析。 甚至存储为environment.yml文件的纯conda环境也可能损坏。 使用以下说明,可以将现有环境打包到Docker或Singularity容器中,该容器应具有更高的可移植性,并且还可以轻松地集成到基于的。 Docker,Podman或Singularity 源conda环境必须在linux x64机器上。 包装环境 conda-pack -n <MY> -o packed_environment.tar.gz # With singularity singularity build --fakero c) 注意:不同的操作系统的安装包版本可能会不一样,需要根据操作系统或平台选择不同版本的安装包。例如:libgfortran工具包在mac系统中版本是5.0.0,在linux-64中的版本为3.0.0。a) 导出安装工具包,需要注意:导出的工具包不能带有构建信息,参考命令如下。b) 执行环境的安装,参考Dockerfile中的安装命令。1. 构建docker环境:配置Dockerfile。2. 安装python运行环境和工具包。 Dockerfile必须和environment.yml文件在用一个目录下,并且都在WORKDIR工作目录下。5. 运行完成后,不出意外也就创建了环境并且一旦创建镜像的容器,就会自动进入该虚拟环境。2. 第二步是将自己的conda虚拟环境导出成environment.yml文件。值得注意的是,如果当前sudo用户没有写文件的权限,需要改变权限,比如使用chromd 777命令。3. 接着就是创建Dockerfile文件,文件里面的内容写上。导出之后的文件在与anaconda3相同的目录下。 为了方便开发,在Docker Hub官方中选择一个合适的condadocker镜像,然后下载到本地。 我选择了“docker-anaconda”,地址是:https://hub.docker.com/r/continuumio/anaconda3 下载命令如下: docker pull continuumio/anaconda. 本篇文章主要介绍如何将服务器`A`上的`conda`环境迁移到服务器`B`上,并解决使用`clear`指令时出现`terminals database is inaccessible`的问题。 综述:为bm单位做事的时候总是有这样的需求,将代码的环境在公网下配置好,封装成docker去bm单位的离线服务器上训练。重新制作一个docker又比较麻烦,希望直接将配好的环境移植到docker中封装。 安装docker,并用 docker pullcontinuumio/anaconda3 指令在docker Hub上下载好装载有anaconda3的镜像。 运用 docker run 指令在 continuumio/anaconda3 镜像的基础上创建容器并运行,具体可自行搜索教学博文 首先安装anaconda,参考在linux中安装anaconda 进入docker,在映射文件夹中输出reqirement.txt,也可以使用docker与宿主机间文件传输。具体参考 容器和宿主机之间拷贝文件 宿主机与容器目录映射 这里选择了映射,已经选择了一个文件夹作为映射文件夹。 此时进入宿主机 sudo docker exec -it royV1 /bin/bash 转到映射文件目录下 cd usr/local/映射文件/ 生成requirements.txt pip freeze > conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/clo "registry-mirrors": [ "https://kfwkfulq.mirror.aliyuncs.com", "https://2lqq34jg.mirror.aliyuncs.com", Docker打包conda环境+代码并上传至Docker Hub【denied: requested access to the resource is denied】 https://docs.docker.com/engine/reference/builder/ docker中通过conda实现多套环境,但与物理机或者dev中的流程有所差异,直接把安装命令搬到dockerfile中不一定能执行成功 1.在dockerfile中创建多套环境 创建多套环境主要通过conda命令:co...