Docker - Image镜像创建及容器操作

Docker 镜像创建

主要包括两部分: 1. 镜像(IMAGE)创建 2. 数据卷(Data Volumes)挂载

1. 镜像(IMAGE)创建

  • 1.1 获取镜像 # 从注册服务器(如Docker Hub、 阿里云等)中的 IAMGE_NAME 仓库中下载标签为latest(默认)和TAG的镜像. $ sudo docker pull IMAGE_NAME $ sudo docker pull IMAGE_NAME:TAG
  • 1.2 查看镜像信息 $ sudo docker images # 列出IMAGE的字段信息: 仓库来源, REPOSITORY 镜像的标签信息,TAG 镜像的ID(唯一) 创建时间 镜像大小
  • 1.3 搜索镜像 # 搜索远程仓库里共享的镜像 \ $ sudo docker search TERM
  • 1.4 删除镜像 $ sudo docker rmi IMAGE:TAG/IMAGE_ID
  • 1.5 创建镜像 创建镜像的方法主要有三种: 基于已有镜像的容器创建 基于本地模板导入 基于Dockerfile创建

这里主要说明第一种方法.

  • 1.5.1 基于已有镜像的容器创建 利用下载好的镜像,使用 docker/nvidia-docker(gpu版本) commit 命令进行容器创建,其命令格式为: $ sudo docker commit [OPTIONS] CONTAINER [REPOSITORY:TAG] OPTIONS 说明: -a, –authors=”“, 作者信息 -m, –message=”“, 提交信息 -p, –pause=true, 提交时暂停容器进行 以基于镜像 aliyun/caffe:latest创建新镜像 aliyun/caffe:v1为例说明. # Step1 启动镜像aliyun/caffe,并在其中进行修改 $ sudo docker run -it aliyun/caffe /bin/bash root@a868ca395b0f:/# # 此时容器ID为a868ca395b0f. # 参数说明: -i, 交互模式,在标准控制台进行输入输出 -d, 后台模式 -t, 为新创建的容器分配一个新的伪终端, 往往与-i合用,-it aliyun/caffe, 镜像名称,也可以是IMAGE_ID /bin/bash, 在新建容器中运行的命令,类似于Ubuntu系统终端操作 # Step2 在容器/bin/bash/中所有操作跟普通的一样,可以进行NVIDIA-Drivers和CUDA的安装、Caffe依赖项安装、Caffe编译和pycaffe接口编译等Caffe环境的搭建操作. 此时与镜像aliyun/caffe相比,已经发生了改变,则可以利用 docker commit 来提交一个新的镜像 $ sudo docker commit -m “Modified Caffe Version” -a “Author-Deepdraw” a868ca395b0f aliyun/caffe:v1 # 该命令会返回新创建镜像的ID信息,一串字符. $ sudo docker images # 查看本地镜像列表,即可看到新创建镜像aliyun/caffe:v1的相关信息  
  • 1.6 保存和载入镜像 # 镜像保存 # 如,将镜像aliyun/caffe保存为文件 aliyun_caffe.tar $ sudo docker save -o aliyun_caffe.tar aliyun/caffe # 镜像载入 # 如,将文件 aliyun_caffe.tar 载入到镜像列表里 $ sudo docker load –input aliyun_caffe.tar # 或 $ sudo docker load < aliyun_caffe.tar
  • 1.7 上传镜像 镜像创建或修改后,可以上传到Docker 镜像存储中心,即仓库(Registry)里,如阿里云提供的Docker仓库服务中,需要登录.
  • 上传本地的aliyun/caffe:v1镜像,可以先添加新的标签(TAG) aliyun/caffe:v1_change, 然后上传 sudo docker tag aliyun/caffe:v1 aliyun/caffe:v1_change sudo docker push aliyun.caffe/caffe:v1_change
  • 上传到阿里云 Docker 仓库
# docker login
# 登录时指明仓库域名:registry.cn-hangzhou.aliyuncs.com
sudo docker login registry.cn-hangzhou.aliyuncs.com
Username: xxx@163.com
Password:
Login Succeeded # 登录成功
确认登录信息:
cat ~/.docker/config.json
{
    "auths": {
        "registry.cn-hangzhou.aliyuncs.com": {
            "auth": "XXXXXXXXXXXXXXXXXXXXXX"
        }
    }
}
企业子账户登录:
sudo docker login registry.cn-hangzhou.aliyuncs.com
Username: subaccount@compannycount
Password:
Login Succeeded
# docker push
sudo docker push registry.cn-hangzhou.aliyuncs.com/caffe:v1

2. 数据卷(Data Volumes)挂载

数据卷是可供容器使用的目录,可以在容器之间共享和重用;对数据卷的修改马上生效;更新数据卷不影响镜像;数据卷会一直存在,直到没有容器再使用.

数据卷的使用类似于Linux下对目录或文件进行 mount 操作.

  • 2.1 容器内创建数据卷 利用docker run -v或–volume=/data1:/data2 命令可以实现数据卷的创建,多个-v可以创建多个数据卷,j以将数据卷挂载到容器的对应目录中,如: $ sudo docker run -v /data/of/container IMAGE_NAME python demo.py
  • 2.2 挂载主机目录作为容器数据卷 该功能允许用户放置部分程序或数据在本地主机目录,然后在容器内运行和使用. 其中,本地目录的路径必须是绝对路径,若不存在,Docker会自动创建, 如: $ sudo docker run -volume=/data1/of/host:/data1/of/container -volume=/data2/of/host:/data2/of/container IMAGE_NAME python demo.py Docker 挂载数据卷的默认权限是读写(rw), 也可以通过ro指定权限为只读,使容器挂载的数据卷中的内容不能进行修改, 如: $ sudo docker run -volume=/data1/of/host:/data1/of/container:ro -volume=/data2/of/host:/data2/of/container:ro IMAGE_NAME python demo.py

3. 容器操作

3.1 查看容器状态

sudo docker ps -a

3.2 新建容器

docker create 命令,如:

sudo docker create -it ubuntu:latest

新建容器处于停止状态,采用 docker start 来启动.

3.3 启动容器

两种启动方式:

  • 基于镜像新建容器并启动;docker run命令
  • 基于停止状态的容器重新启动; docker create + docker start 命令.

3.4 退出容器

exit 命令.

3.5 后台运行容器

Docker 容器在后台以守护状态(Daemonized) 运行.

sudo docker run -d ubuntu:latest /bin/sh -c "***"

容器启动,返回唯一 ID .

查看容器信息:

sudo docker ps

查看容器的输出信息,docker logs

sudo docker logs docker_container_ID

3.6 停止容器

sudo docker stop docker_container_ID

查看处于停止状态的容器 ID 信息:

sudo docker ps -a -q

重新启动停止状态的容器:

sudo docker start docker_container_ID

停止运行状态的容器,并重启:

sudo docker restart docker_container_ID

3.7 进入容器

exec命令.

sudo docker exec -it docker_container_ID /bin/bash

3.8 删除容器

查看处于停止状态的容器,并删除:

sudo docker ps -a
sudo docker rm container_ID 

删除处于运行状态的容器:

sudo docker rm -f container_ID

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券