美文网首页
Docker使用

Docker使用

作者: 九月_1012 | 来源:发表于2020-04-10 19:16 被阅读0次

docker常用命令

0 权限修改后使用docker,不用再输sudo

#默认状态下,只有 root 用户可以运行  docker 命令;通过以下命令获取权限
sudo usermod -aG docker $USER
sudo service docker restart
重新登陆

1 docker使用前查看服务器docker安装信息

docker info    #查看docker安装信息
docker images    #查看本地下载镜像

2 将远程仓库中的镜像复制到本地

docker pull 
#获取如下镜像:https://hub.docker.com/r/rocker/r-rmd
#docker hub 公共镜像仓库(repository)
docker pull rocker/r-rmd

3 在指定容器运行命令

docker run [参数] IMAGE [COMMAND] [ARG...]
常用参数:
-v,将宿主机器的目录,挂载到容器环境。只有这样,容器才能读取到数据;
-it,以命令行方式进入到容器中;
--rm,退出容器后,删除容器中的所有文件和状态 —— 建议:在构建镜像、测试环境时不添加该参数,以便保留容器生成镜像;而在实际使用容器进行分析时,可以添加该参数,以删除不必要保留的中间文件;
-d,将运行的命令放到后台执行;
eg:
$ docker run \ # 运行
-v /local_path1/inputBam:/input \ # 将本地目录 /local_path1/inputBam 挂载到容器的 /input/ 目录
-v /local_path2/results:/output \
-v /local_path3/database:/database \
--rm \ # 命令运行结束后删除容器
IMAGE_name:v1 \ # 构建容器所使用的镜像,此处注意要加tag(比如 “:v1”),否则系统自动加上tag “:latest”
/bin/bash -c “source activate /XX/envs/IMAGE_name && python /XX/scripts/init.py -i /input/ -c /XX/config.yaml -o /output/“  # 在容器(IMAGE_name)中运行的命令,路径都是容器的路径

4 容器运行状态

docker ps  #列出正在运行的容器;
docker ps -a  #列出所有容器;
#生成镜像,在docker ps -a之后出现的第一列是容器的ID,我们使用该ID生成一个mytool的镜像
docker commit IDXXX mytool:v1

5 将工具部署到docker环境,生成镜像;

#首先明白这句话是什么意思:当我有一个功能程序(比如一个python代码),想在docker环境(构建镜像)中使用,需要将python依赖下载到镜像;
往往我们可以先下载一个现成的镜像,在现成的镜像中测试好工具后,‘docker ps -a ’查看运行完的容器,commit该容器为一个新命名的镜像。

6 同时创建(下载)并启动(运行)容器

docker run -i -t centos /bin/bash
"""
参数解释
-i 选项:容器启动后,打开标准输入设备(STDIN),可使用键盘输入
-t 选项:容器启动后,分配一个为终端,将与服务器建立一个会话
centos 参数:需要运行的镜像名称,标准格式为centos:latest, 若为latest版本,则可忽略
/bin/bash 表示容器中bash应用程序
该命令首先从本地获取镜像,本地没有镜像,则从Docker Hub拉取放到本地。
"""

7 删除-导出-导入镜像

docker rmi centos:latest # 删除镜像 ;加-f 强制删除
docker save sw:v1 | gzip > sw-v1.tar.gz # 导出镜像
docker load < sw-v1.tar.gz # 在当前目录中导入镜像

8 查找和下载镜像

#查找镜像
docker search [镜像名称]
#下载镜像
docker pull [镜像名称]

9 设置Docker Hub镜像站点/加速器

10 docker使用的一个例子(命令行)
1)先进入一个docker环境

#创建一个新的docker环境
docker run -it  -v /local_path/:/input centos /bin/bash
#或者docker images看现在有什么环境,比如有一个pysam的环境,我进入该环境:
docker run -it -v /local_path/:/input miniconda-pysam:v1 /bin/bash

2)在docker环境中安装需要的软件

#安装软件前需要先update,否则找不到软件
apt-get update
apt-get install samtools

3)把程序从宿主机器拷贝到docker环境目录

mkdir tools && cp /input/code.sh /tools/    #/input是宿主路径挂载到容器的路径,/tools/是容器路径
ls -l /tools/
#在docker环境中运行该程序测试,确认命令在容器内可以顺利运行
sh /tools/code.sh /input/
#退出容器
exit

4) 测试在宿主运行docker环境命令

docker run -rm -v /loca_path/data:/input/ mytool:v1 /tools/code.sh /input/xxx   # mytool:v1是工具的名称加tag; tools是宿主路径

11 通过 Dockerfile 来进行镜像构建

FROM 指定基础镜像               
RUN 执行命令
RUN ["可执行文件", "参数1", "参数2"]

**需要注意每RUN一下,就会新commit一层,部署臃肿,应该写一个RUN 后面加多个命令**
COPY 指令
ADD 指令

来一个使用Dockerfile构建镜像的例子
11.1)确定一个宿主目录,该目录要放Dockerfile 和Dockerfile 里涉及到的shell文件
11.2)写一个Dockerfile 的文本文件

FROM ubuntu:14.04

RUN apt-get update \
  && apt-get install wget \
  && wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh \
  && sh -c '/bin/echo -e "\nyes\n\nyes"|sh Anaconda3-5.3.1-Linux-x86_64.sh' \
  && mkdir -p /workdir

COPY . /workdir

#install conda
CMD conda

11.3) 构建镜像
以下命令要在Dockfile所在的目录运行

docker build -t anaconda3:v1 .    #-t 后面是镜像名称:tag   一定要注意后面有一个dot .  代表上下文目录
或者
#从标准输入中读取 Dockerfile 进行构建
docker build - < Dockerfile

12 最后,docker本身的安装如下

sudo apt-get update 

# step 1, 检查必要的包 
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common  

# step 2: 安装GPG证书 
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 

# Step 3: 写入软件源信息 
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" 

# Step 4: 更新 apt 数据库,安装 docker 
sudo apt-get -y update 
sudo apt-get -y install docker-ce  

# Step 5:确认 docker 安装是否成功(测试环境版本为,Docker version 18.06.3-ce, build d7080c1) 
sudo docker --version 

13 基于本地服务器构建私有Docker仓库

#考虑到我们的镜像不想在Docker hub中公开,我们可以使用registry做私有镜像注册中心。搭建Docker Registry:

docker run -d -p 5000:5000 -v ~/docker-registry:/tmp/registry registry
如果要把镜像推送到这个地址(假设在这里是本地地址http://192.168.40.02:5000),需要更改镜像的名称。
docker tag [镜像id] 192.168.40.02:5000/liuyue/java
使用push命令即可将该镜像推送到私有镜像中心
docker push 192.168.40.02:5000/liuyue/java

相关文章

网友评论

      本文标题:Docker使用

      本文链接:https://www.haomeiwen.com/subject/oihzphtx.html