镜像、容器和仓库

Docker镜像: 镜像是一个只读的模板,可以用来创建Docker容器。可以直接创建一个镜像,或者是更新已有镜像,或者复制他人的镜像直接使用。

Docker容器: 容器是镜像的实例,用来执行各种应用,可以同时启动多个容器,相互之间是隔离的。

Docker仓库: 仓库用来集中存放镜像文件。仓库可以分为公开仓库和私有仓库,Docker Hub是最大的公开仓库,用户可以在本地网络创建一个私有仓库。

镜像完成之后可以使用push命令上传到仓库,在另外一台机器上使用pull从仓库下载镜像文件。

ubuntu安装docker

Docker要求Ubuntu系统的内核版本高于3.10,使用  uname -r  命令查看系统的内核版本。

ubuntu docker安装:

wget -qO- https://get.docker.com/ | sh

或者:

sudo apt-get install docker.io

Centos安装docker

yum -y install docker

查看本地已有镜像

sudo docker images


REPOSITORY: 镜像所属仓库
TAG: 镜像的标记
IMAGE ID: 镜像的ID号
CREATED: 创建时间
VIRTUAL SIZE: 镜像大小


启动一个容器

使用 docker run 启动一个容器:

sudo docker run -it ubuntu:17.04

或:

sudo docker run -it -d ubuntu:17.04

ubuntu是仓库名称,17.04是镜像的标记。
当利用 docker run 来创建容器时,Docker会检查本地是否存在指定的镜像,不存在就从公有仓库下载。

-t -i -d 参数

sudo docker run -t -i  指令中 -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开,这个伪终端接管了本机的输入输出交互操作,从而容器的bash命令不会自动退出; -d参数使容器在后台运行。

使用 ps 查看活动容器信息

sudo docker ps

查看所有容器(包括已经终止里的容器):

sudo docker ps -a



进入后台运行的容器

sudo docker exec -it 2991520cae60 /bin/sh


2991520cae60 是容器ID

从仓库获取镜像

使用 docker pull 命令从仓库获取镜像:

sudo docker pull ubuntu:17.04

指定镜像标号(17.04)会下载指定镜像,不指定,会获取最新:

sudo docker pull ubuntu



修改已有镜像

先启动镜像的容器:

sudo docker run -it ubuntu:17.04

例如修改是在17.04容器中安装python:

apt-get update
apt-get install python

安装完成之后使用 exit 指令退出容器:

exit

保存容器修改到镜像

sudo docker commit 78b97ea ubuntu:0301

“78b97ea”是需要保存的容器的ID ,ubuntu是仓库名称,0301是新保存的镜像标记。

镜像文件导出和导入

1. 使用 docker save 命令把镜像导出到本地文件:

sudo docker save -o /home/dcrmg/docker/0301.tar ubuntu:0301

2. 使用 docker load 命令把本地镜像文件导入到本地镜像库:

sudo docker load --input /home/dcrmg/docker/0301.tar

删除镜像

使用 docker rmi 命令移除本地镜像:

sudo docker rmi d7eec825bed5

"d7eec825bed5"是镜像的ID(Image ID)
在删除镜像之前需要先用 rm 指令删除掉依赖于这个镜像的所有容器,否则会报以下错误:

unable to delete ef79b6133b17 (must be forced) - image is being used by stopped container 4b40936a1dc6

报错提示给出了容器ID,使用rm 指令依次删除就行了:

sudo docker rm 4b40936a1dc6

从主机复制文件到容器

指令: sudo docker cp host_path containerID:container_path

sudo docker cp ./abc c9dfbddc1a78:/home

从容器复制文件到主机

sudo docker cp containerID:container_path host_path

sudo docker cp c9dfbddc1a78:/home/csd ./0303

挂载本机数据卷(目录)实现文件共享

使用 -v 指令在启动容器时挂载本机数据卷:

sudo docker run -it -v /test:/soft ubuntu:16.04 /bin/bash

1. 冒号前边是主机目录,冒号后边是容器内的目录
2. 冒号后的/soft是会在启动的容器中自动创建的目录,该目录和主机目录下的文件共享,/soft目录需要时绝对路径(要以 '/'开头)
3. 指定的主机目录如果不存在,也会自动创建,最好也是用绝对路径
4. 容器销毁之后,主机目录和数据仍然存在

退出容器但不关闭

Ctrl+P+Q

退出容器并关闭

exit

exit 指令是退出并关闭当前容器,但是没有销毁容器,使用restart指令重新启动容器:

sudo docker restart ID

启动后台运行的容器

sudo docker attach ID

启动已经关闭了的容器

sudo docker restart ID
sudo docker attach ID

保存容器到本地磁盘

sudo docker export ID > /home/docker/abc.tar

使用Dockerfile创建镜像

sudo docker build -t centos_CUDA /home/dockerfile_file

centos_CUDA  是镜像标签,  /home/dockerfile_file 是Dockerfile文件所在文件夹

Docker端口映射

启动容器时通过配置宿主机器与容器的端口映射,使外部程序可以通过端口访问容器:

sudo docker run -it -p ipHost:ipContainer  Centos:V3 /bin/bash

查看容器和主机的端口映射信息

docker port ID

显示:

8080/tcp -> 0.0.0.0:80

表示把容器的8080端口映射成宿主机器的80端口

或者使用 sudo docker ps 查看  PORTS 列下显示的映射信息

Docker支持中文

使用 locale 和 locale -a 查看当前支持语言和可按装语言:

在容器中执行以下指令安装中文包:

yum -y install kde-l10n-Chinese && yum -y reinstall glibc-common
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
export LC_ALL=zh_CN.utf8

之后查看语言支持,已经支持中文字符:

以上设置只在当前容器有效,保存容器到新建镜像,在新建镜像上启动的容器中输入以下指令设置中文环境:

export LANG=zh_CN.utf8

或者在启动容器的时候加入指令:

sudo docker run -it -e 'LANG=zh_CN.UTF-8' centos:latest

Docker及常用操作的更多相关文章

  1. docker 基本常用操作做

    docker 基本常用操作做(只列举入门常用的命令) 容器生命周期管理 docker run :创建一个新的容器并运行一个命令 -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDO ...

  2. docker镜像常用操作的基本命令

    1.拉取/下载镜像 docker pull 镜像名称       (可以从网易云镜像中心获取要下载的镜像) 2.查看已经下载的镜像 docker images 3.删除本地镜像 docker rmi ...

  3. docker的常用操作

    查看所有的镜像: docker images 查看所有的容器: docker ps -a 查看正在运行的容器: docker ps 移除容器: docker rm -f 容器id 移除镜像: dock ...

  4. docker的常用操作之三:网络配置

    一, docker安装后容器使用哪些网络类型? 在宿主机执行如下命令: [root@localhost liuhongdi]# docker network ls NETWORK ID NAME DR ...

  5. docker的常用操作之二:docker内无法解析dns之firewalld设置等

    一,如何启动一个已退出的容器? [root@localhost ~]# docker start storage4 说明:架构森林是一个专注架构的博客,地址:https://www.cnblogs.c ...

  6. docker镜像常用操作

  7. Docker镜像与容器的常用操作

    Docker镜像加速配置:Docker镜像常用操作:Dcoker容器常用操作. 镜像加速器 国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器.国内很多云服务商都提供了国内加 ...

  8. 容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

    前面讨论了如何运行容器,本节学习容器的其他常用操作. stop/start/restart 容器 通过 docker stop 可以停止运行的容器. 容器在 docker host 中实际上是一个进程 ...

  9. Docker常用命令汇总,和常用操作举例

    Docker命令 docker 常用命令如下 管理命令: container 管理容器 image 管理镜像 network 管理网络 node 管理Swarm节点 plugin 管理插件 secre ...

随机推荐

  1. [BZOJ4552]排序

    Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...

  2. maven问题:如何启动maven项目

    maven是项目构建工具,用于解决jar间的依赖,启动maven项目的命令:tomcat:run 步骤如下: 1.在pom.xml文件中配置插件,此处配置的是tomcat8 2.右击项目名,找到Run ...

  3. 关于xftp连接不了Linux,但是却可以用xshell连接Linux

    解决方法:用sftp协议,不要用ftp协议

  4. 比较好的Json 格式数据

    { "81040753986": [{ "order_info": { "unique_package_reference": " ...

  5. Python基础笔记系列七:字符串定义和访问

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 字符串定义和访问 1.字符串基础 a.字符串可以用单引号.双引号.三引号( ...

  6. 公众号菜单中的click

    $params = [ 'button' => [ [ 'type'=>'click', 'name'=>'就送帽子', 'key'=>'V1001_PRESENT', ], ...

  7. 简单UML

    http://www.cnblogs.com/pluviophile/p/7542017.html,看了这篇博文感觉这个例子有用遂搬运过来方便查阅 上面的类图就体现了所需要了解的类的6个基本关系 该类 ...

  8. 《深入理解mybatis原理3》 Mybatis数据源与连接池

    <深入理解mybatis原理> Mybatis数据源与连接池 对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构 ...

  9. Ansible 小手册系列 二十(经常遇到的问题)

    (1). 怎么为任务设置环境变量? - name: set environment shell: echo $PATH $SOME >> /tmp/a.txt environment: P ...

  10. date.timezone not set in php.ini. Please contact ...解决方案

    无论是在LAMP还是在LNMP系统环境下, 只要PHP的版本在5.3及其以上的版本时, 无论是在安装oscommerce, 还是在安装zen cart, 以及其他的CMS时, 都会遇到如下所示的错误信 ...