Docker基本概念与实践(一)-镜像

简介: Docker镜像镜像是运行容器的前提Docker镜像是Docker三大核心概念最为关键一环,简单来说镜像就是把业务代码和可运行环境进行整体的打包。

Docker镜像

镜像是运行容器的前提
Docker镜像是Docker三大核心概念最为关键一环,简单来说镜像就是把业务代码和可运行环境进行整体的打包。
镜像可以看作是一个特殊而且只可读的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。(例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了Mysql或用户需要的其它应用程序。)
从下图可以看出,Docker 包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是Docker的核心。
img_6cf7ee2b0cb4ea4fb00f32175839a4a3.jpe
结构图

拉取镜像前准备工作

为了方便以后的管理,新增docker用户并赋予执行docker命令的权限

#增加docker分组
groupadd docker

#创建docker用户的同时直接加入docker组 
useradd -d /home/docker -g docker docker

#使用root用户为docker用户设置密码 
passwd docker

#使用root用户 添加sudo文件写权限
chmod u+w /etc/sudoers

#编辑sudoers文件加入docker用户并保存
vi /etc/sudoers  #执行这步后找到文件里root ALL=(ALL) ALL  在下面一行添加docker ALL=(ALL) ALL

#恢复sudo文件的只读权限
chmod 440 /etc/sudoers

#重启Docker 
systemctl restart docker

国内的服务器由于拉取镜像速度感人QAQ,因此博主采用阿里云作为加速地址(也可使用网易蜂巢等)

需在阿里云注册个人专属加速地址

img_97386acdd4d895140be94fcbdf09b425.png

yum安装docker默认配置文件在 /etc/docker/ 下,在daemon.json文件中加

"registry-mirrors": ["xxx"]  #xxx为专属加速地址
img_c4d7bd58d120a6285ff4b8e015d55dc6.png

拉取镜像

1.通过dockerfile构建:dockerfile是用命令行文本的方式构建生成镜像

2.doacker pull拉取镜像:docker pull是从仓库里拉取镜像到本地 

区别在于一个生产新的 一个从已有仓库获取

以拉取官方ubuntu镜像为例

#搜索带星的ubuntu镜像
docker search ubuntu--s

#拉取镜像  (默认版本最新标签为latest 【docker inspect ubuntu可以查看具体信息包含版本号】)
docker pull ubuntu

#拉取后可以随时使用镜像 -t为开启连接终端 -i为开启input输入功能通常一起使用 可以用该操作系统镜像启动容器 执行bash应用等 以执行bash应用为例
docker run  -t -i ubuntu /bin/bash

#查看刚刚镜像启动的容器
docker -ps a

#修改镜像标签 例如生成一个名为myubuntu标签为garwer的镜像 此时会多出一个刚创建id相同的镜像(实际指向的镜像文件相同,只是名称不同,docker tag起了类似连接作用
docker ubuntu:latest myubuntu:garwer
执行结果
img_6dacac18bc7f3a8a8f507818df5b2da8.png
img_d78f1ebf4d11d8ced3a8a8b0470a13bf.png

创建镜像的三种方式

1.基于已有镜像的容器创建
2.基于本地模板导入
3.dockerfile创建

1.基于已有镜像的容器创建

docker commit

例如现在已经有ubuntu镜像 使用ubuntu安装命令安装apache2

依次执行

docker run -i -t ubuntu /bin/bash
apt-get -yqq update
apt-get -y install apache2 
#安装完成后退出
exit 
img_41566f8da6d1dd4874755eeb95c6eff6.png

启动了一个容器,并在里面安装了Apache。我们会将这个容器作为一个Web服务器来运行,所以我们想把它的当前状态保存下来。这样我们就不必每次都创建一个新容器并再次在里面安装Apache了。为了完成此项工作,需要先使用exit命令从容器里退出,之后再运行docker commit命令:

#查看刚刚创建并退出的容器
docker ps -a

#其中 -m为提交信息 -a为作者信息 testapache为起的标签名 会生成一串很长的镜像id fa1a4c0cccb0为你的ubuntu容器id
docker commit -m "added a new file" -a "Docker linjw" fa1a4c0cccb0  testapache

#查看镜像 包含了个刚刚创建安装有apache2的ubuntu镜像 
docker images
img_25e6c8f203f2c833dd07103aeb34e603.png

基于本地模板导入(没试过)

img_e59367a551c769fa1ce4276629f0c667.png

使用Dockerfile创建

内容较多,下篇单独讲解


提交镜像到官方镜像DockerHub上

1.https://hub.docker.com/ 先在官网注册
2.上传自制镜像,例如上传创建的testapache镜像(修改标签后上传)
3.更改标签后然后docker push自制镜像(docker push默认提交到docker仓库,需要登陆)
#更改要提交的镜像的标签,规范格式为 user/imagename:tag,例如:
docker tag testapache:latest linjiawei10086/testapache:garwer 

#登陆docker官网并输入账号密码
docker login

#将刚刚修改标签的镜像提交dockerhub
docker push linjiawei10086/testapache:garwer 
img_8e21cffa382d9ebd15f251ad210bf999.png
成功后登陆dockerhb个人仓库可看到自己自制提交的镜像
img_bdebb240ec826b57bcb945d7a7613737.png
dockerhub个人仓库

删除镜像

#删除镜像  根据镜像命或标签删除单个 例如docker rmi testapache:v1、docker rmi 0cadef2b6ac8
docker rmi name:tag/imageid

#当有该镜像创建的容器时,镜像文件无法删除,可用docker rmi -f name:tag/imageid强制删除,但建议先删掉容器再删镜像
docker rmi -f name:tag/imageid

#删除全部镜像
docker rmi $(docker images -q)
目录
相关文章
|
16天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
56 2
|
22天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
816 29
|
2月前
|
缓存 监控 持续交付
|
18天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
18天前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
24天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
108 2
|
25天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
52 1
|
26天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
1月前
|
存储 缓存 Java
Java应用瘦身记:Docker镜像从674MB优化至58MB的实践指南
【10月更文挑战第22天】 在容器化时代,Docker镜像的大小直接影响到应用的部署速度和运行效率。一个轻量级的Docker镜像可以减少存储成本、加快启动时间,并提高资源利用率。本文将分享如何将一个Java基础Docker镜像从674MB缩减到58MB的实践经验。
50 1
|
2月前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
88 2