Docker镜像与容器基本操作

Docker镜像与容器基本操作

文章较长,建议根据目录按需查找。

一、镜像基本操作

镜像是 Docker 三大核心概念中最重要的,自 Docker 诞生之日起镜像就是相关社区最为热门的关键词。 Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在Docker 会尝试先从默认镜像仓库下载,用户也可以通过配置, 使用自定义的镜像仓库。

1.1列出本机镜像

docker images

在这里插入图片描述

说明:

  • REPOSITORY: 来源仓库
  • TAG: 镜像的标签信息, 表示镜像的版本. 只是标记, 并不能表示镜像内容
  • IMAGE ID: 镜像id, 唯一表示一个镜像. 如果两个镜像的 ID 相同, 说明它们实际上指向了同一 个镜像, 只是具有不同标签名称而已;
  • CREATED: 镜像的最后更新时间.
  • SIZE:镜像大小

1.2获取一个新镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

docker pull hello-world

在这里插入图片描述
下载完成后, 可以使用这个镜像来运行容器

1.3配置国内镜像源地址

下载镜像的时候, 默认是从官方地址下载, 服务器在国外, 速度比较慢, 可以换成国内镜像.

国内常用加速地址:

  • 网易
    http://hub-mirror.c.163.com

  • 中国科技大学
    https://docker.mirrors.ustc.edu.cn

  • 阿里云容器服务
    https://cr.console.aliyun.com/
    首页点击“创建我的容器镜像” 得到一个专属的镜像加速地址,类似于
    https://abcdef.mirror.aliyuncs.com

配置方法:

sudo vim /etc/docker/daemon.json

{
    "registry-mirrors": [
                                "http://hub-mirror.c.163.com",
                                "https://docker.mirrors.ustc.edu.cn",
                                "https://813o9nus.mirror.aliyuncs.com"
                         ]
}
	

说明:
1.关于阿里云地址, 参考:
https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.550.469742c75wmmC8

2.重启docker: sudo systemctl restart docker

3.查看是否配置成功:docker info
在这里插入图片描述

1.4搜索镜像

docker search hello-world

在这里插入图片描述

1.5删除镜像

  • 使用tag删除镜像
docker rmi hello-world:latest

在这里插入图片描述
注意:
1.如果删除的时候报错: 有容器使用了该镜像, 则需要先删除使用过该镜像的容器, 才能删除该镜像.
在这里插入图片描述

2.删除容器, 再删镜像
在这里插入图片描述

  • 使用id删除镜像
docker rmi bf756fb1ae65

在这里插入图片描述

  • 清理镜像
    使用 Docker 一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过 docker image prune -f 命令来进行清理。

二、容器基本操作

容器是 Docker 的另一个核心概念。 简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。

如果认为虚拟机是模拟运行的一整套操作系统(包括内核、 应用运行态环境和其他系统环境)和跑在上面的应用。 那么 Docker 容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境。

2.1创建容器

1.获取centos:7.5.1804的镜像

docker pull centos:7.5.1804        

在这里插入图片描述

2.创建容器

docker create -i -t centos:7.5.1804  /bin/bash

在这里插入图片描述
说明:

  • I.创建一个交互式的容器
  • II. -i: 允许你对容器内的标准输入 (STDIN) 进行交互
  • III. -t: 在新容器内指定一个伪终端或终端。

3.启动容器

docker start bcc

在这里插入图片描述

4.新建并启动容器

前面的操作是先创建容器, 然后再启动容器. 也可以使用run来直接新建并启动容器

启动一个交互式的centos容器

docker run -it centos:7.5.1804 /bin/bash

说明:

  1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载;
  2. 利用镜像创建一个容器,并启动该容器;
  3. 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层 ;

5.查看有哪些容器

  1. 查看启动的容器
	docker ps

在这里插入图片描述

  1. 查看所有容器
	docker ps -a

在这里插入图片描述

6.启动后台进程

	docker run -itd centos:7.5.1804 /bin/bash

2.2停止容器

    docker stop bcc

在这里插入图片描述

2.3进入容器

在使用 -d 参数时,容器启动后会进入后台(有些容器默认就是后台, 比如centos容器)。此时想要进入容器,可以通过以下指令进入:

	docker exec -it bcc /bin/bash

在这里插入图片描述

通过指定 -it参数来保持标准输入打开, 并且分配一个伪终端。可以看到会打开一个新的 bash 终端,在不影响容器内其他应用的前提下,用户可以与容器进行交五。

2.4删除容器

1.删除已经停止的容器

docker rm ea5c

在这里插入图片描述

2.删除正在运行的容器
先停止, 再删除

docker rm -f bcc

在这里插入图片描述

2.5导入和导出容器

某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用 Docker 的导人 和导出功能,这也是 Docker 自身提供的一个重要特性。

为了测试容器是否导出和导入成功, 我们在centos容器中创建一个新的文件

在这里插入图片描述

2.5.1导出容器

导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态.

docker export -o '/home/atguigu/test_for_centos.tar' 9fa

在这里插入图片描述

可以把导出的tar文件, 传输到其他设备, 再通过导入命令导入, 实现容器的迁移.

2.5.2导入容器

将上节导出的容器导入之后会成为镜像.

docker import test_for_centos.tar -- test/mycentos:1.0

在这里插入图片描述

使用新的镜像启动容器:
在这里插入图片描述

刚才创建的文件还在

2.6查看容器

2.6.1查看容器详情
docker container inspect 9fa

在这里插入图片描述

会以 json 格式返回包括容器 Id、创建时间、路径、状态、镜像、配置等在内的各项信息

2.6.2查看容器内进程
docker top 9fa

在这里插入图片描述

这个子命令类似于 Linux 系统中的 top 命令, 会打印出容器内的进程信息, 包括 PID 、 用户、时间、命令等

2.6.3查看统计信息
docker stats --no-stream 9fa

在这里插入图片描述

会显示 CPU 、内存、存储、网络等使用情况的统计信息

2.7容器和主机之间复制文件

容器和主机之间进行文件复制的时候, 要保证容器已经启动.

2.7.1从主机复制到容器
docker cp test.txt 9fa:/

在这里插入图片描述

2.7.2从容器复制到主机
docker cp 9fa:/a.txt ./

在这里插入图片描述

三、镜像高级操作

本章在第1章的基础上, 介绍镜像高级操作

3.1创建镜像

创建镜像的方法主要有2种:

  • 基于已有容器创建。
  • 基于Dockerfile文件创建
3.1.1.基于已有容器创建
docker commit -m 'add new file : a.txt' -a 'hadoop'  9fa  new_centos:1.0

说明:
1.-m 提交信息
2.-a 作者
3.9fa 旧有的容器
4.new_centos:1.0 新的镜像

在这里插入图片描述
在这里插入图片描述

3.1.2.基于Dockerfile 创建

基于 Dockerfile 创建是最常见的方式。 Dockerfile 是一个文本文件, 利用给定的指令描述基于某个父镜像创建新镜像的过程。

下面使用Dockerfile创建一个基于centos的java开发环境:

  1. 把jdk安装转包copy到 /home/atguigu 目录下
	cd ~
	cp jdk-8u212-linux-x64.tar.gz ./
  1. 在/home/hadoop上创建Dockerfile文件
	vim Dockerfile

	FROM centos:7.5.1804
	RUN mkdir -p /opt/software
	RUN mkdir -p /opt/module
	COPY jdk-8u212-linux-x64.tar.gz /opt/software/
	RUN tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module
	RUN rm -rf /opt/software/jdk-8u212-linux-x64.tar.gz
	ENV JAVA_HOME=/opt/module/jdk1.8.0_212
	ENV PATH=$JAVA_HOME/bin:$PATH

说明:

  • 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
  • 第一条FROM,指定使用哪个镜像源
  • RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
  • COPY 是把文件copy到镜像中. 源文件必须是相对路径不能是绝对路径
  • ENV 在镜像中设置环境变量

3.创建镜像, 并等待创建成功

	docker build -t centos_java8:1.0 .

说明:

  1. -t 指明镜像名字和标签
  2. . 表示Dockfile所在目录

4.测试镜像是否可以正常工作

	docker run centos_java8:1.0 java -version

在这里插入图片描述

3.2保存和加载镜像

使用保存和加载功能可以把本机的镜像发给其他人使用

3.2.1.保存镜像
docker save -o atguigu_centos_java8.tar centos_java8:1.0
3.2.2.加载镜像

把刚刚保存的镜像发给别人(hadoop103), 然后加载导入.

docker load -i atguigu_centos_java8.tar

在这里插入图片描述

四、为镜像添加ssh服务

很多镜像是不带ssh服务的, 管理镜像非常的不方便, 本章介绍如何给镜像添加ssh服务

4.1创建镜像

Dockerfile:

# 设置继承镜像
FROM centos_java8:1.0

# 更换国内阿里云yum源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
RUN yum makecache

# 安装sshd
RUN yum install -y openssh-server openssh-clients
RUN sed -i '/^HostKey/'d /etc/ssh/sshd_config
RUN echo 'HostKey /etc/ssh/ssh_host_rsa_key'>>/etc/ssh/sshd_config

# 生成 ssh-key
RUN ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key

# 更改 root 用户登录密码为
RUN echo 'root:aaaaaa' | chpasswd

# 开发 22 端口
EXPOSE 22

# 镜像运行时启动sshd
RUN mkdir -p /opt
RUN echo '#!/bin/bash' >> /opt/run.sh
RUN echo '/usr/sbin/sshd -D' >> /opt/run.sh
RUN chmod +x /opt/run.sh
CMD ["/opt/run.sh"]

构建

docker build -t centos_java8_sshd:1.0 ./

4.2运行容器, 测试镜像

docker run -d -p 2222:22 centos_java8_sshd:1.0

说明: 把容器的22端口映射到宿主机器的2222端口, 这样通过ssh连接宿主机器的2222端口就可以连接到容器了.

ssh root@192.168.14.112 -p 2222

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值