docker入门及实战(纯干货)
要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。一个镜像可以对应多个不同的容器,这是因为容器在运行时会加上一些自己的可变数据,这些数据会被写入到镜像中,因此不同的容器可以在不同的环境中运行(例如不同的操作系统、不同的应用场景等)。而容器是动态的,类似于运行代码的进程,是基于镜像创建的,包含了镜像和运行时的可变数据。总之,Docker镜像和容器是Docker容器化技术
目录
一、docker的基本概念
1.1 docker的三大核心组件
Docker 仓库 - Docker registery
Docker 镜像 - Docker images
Docker 容器 - Docker containers
1.2 docker仓库的概念
仓库是用来保存镜像,可以理解为代码控制中的代码仓库。但有公有和私有区别
公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供用户使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。
1.3 docker镜像的概念
Docker镜像是一种轻量级的、可执行的独立软件包,它包含运行某个软件所需的所有内容,包括代码、运行时所需的库、环境变量和配置文件等,只有通过镜像才能生成Docker容器实例。Docker的镜像由一层一层的文件系统组成,这种层级的文件系统UnionFS,在bootfs和rootfs之间,包含的就是典型Linux系统中的/dev、/bin、/etc等标准目录和文件
镜像由三部分组成:
镜像名称:仓库名称+镜像分类+tag名称(镜像版本)1.存储对象:images
2.格式:库名/分类:tag
3.tag:表示镜像版本镜像id:
所有镜像都是通过一个 64 位十六进制字符串来标识的。 为简化使用,前 12 个字符可以组成一个短ID,可以在命令行中使用。短ID还是有一定的碰撞机率,只要我们每个ID号不冲突就可以了
完整镜像名称示例:
docker.io/library/nginx:v1
docker.io/library/nginx:latest
daocloud.io/library/nginx
1.4 docker容器的概念
Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、启动、停止、移动、删除、暂停(挂起)。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行一部分。容器有两个不同的状态:运行态(Running)和退出态 (Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出状态。
当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象。
docker容器可以用以下命令实现:
# docker run -it imagename /bin/bash
1.5 docker镜像和容器的区别
镜像是静态的,容器是动态的。
镜像是不可变的,代表一个独立的、可执行的软件包,类似于我们写的代码;而容器是动态的,类似于运行代码的进程,是基于镜像创建的,包含了镜像和运行时的可变数据。
镜像以文件形式保存在硬盘中,可以独立存在;而容器是运行在内存中的,只能靠运行镜像而存在。
同样的镜像可以创建多个容器。
一个镜像可以对应多个不同的容器,这是因为容器在运行时会加上一些自己的可变数据,这些数据会被写入到镜像中,因此不同的容器可以在不同的环境中运行(例如不同的操作系统、不同的应用场景等)。
总之,Docker镜像和容器是Docker容器化技术的两个重要概念,它们之间的关系类似于代码和进程之间的关系,镜像是静态的、不可变的,而容器是动态的、可变的。
要列出本地所有有效的镜像,可以使用命令:
docker images
docker image list
当一个镜像的名称不足以分辨这个镜像所代表的含义时,你可以通过tag将版本信息添加到run命令中,以执行特定版本的镜像。
例如:docker run ubuntu:14.04镜像可以发布为不同的版本,这种机制我们称之为标签(Tag)可以使用pull命令加上指定的标签:
# docker pull ubuntu:11
# docker pull ubuntu:12.04
# docker pull centos:7
二、docker的安装
Docker官网
选择docker-ce,toolbox是收费版本
可以根据自己的系统选择版本,然后跟着步骤做就行了
docker -v 查看版本
docker info 查看docker状态
三、镜像管理
3.1 搜索镜像(只适合官方镜像库)
3.2 外部拉取镜像
https://dashboard.daocloud.io/packages/explore
3.3 查看本地所有镜像,docker pull
网速太慢,我取消了,这是之前拉的。
3.4 查看所有镜像id
3.5 删除镜像
删除一个或多个,多个之间用空格隔开,可以使用镜像名称或id
docker rmi daocloud.io/library/mysql 或者 docker rmi 81debc参数解释:
rm Remove one or more containers ---移除一个或多个容器
rmi Remove one or more images ---删除一个或多个镜像强制删除
如果镜像正在被使用中可以使用--force强制删除
docker rmi docker.io/ubuntu:latest --force
-f, --force Force removal of the image注意: 容器运行中不能删除,将容器停止后,删除容器,再删除镜像。
删除所有镜像(注意是单引号)
docker rmi ’docker images -q‘
3.6 查看镜像制作过程
docker history daocloud.io/library/nginx 使用镜像名或者镜像ID都可以
四、容器管理
4.1 创建新容器但不启动
docker create -it daocloud.io/library/centos:7 /bin/bash
4.2 创建并运行一个新Docker 容器:同一个镜像可以启动多个容器,每次执行run子命令都会运行一个全新的容器
参数解释
[root@docker-server ~]# docker run -it --restart=always daocloud.io/library/centos:7 /bin/bash #最常用
-i:标准输入输出
-t:分配一个终端或控制台
--restart=always:容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭
也适用于create选项
-d 后台运行容器,并返回容器ID
4.3 执行容器
(运行容器时要给容器设置个名字)如果没有指定,docker会自动分配一个随机名称是 docker run 子命令的参数
--name= Assign a name to the container
docker run -it --name 名字 daocloud.io/centos:6 /bin/bash #名字自定义docker run -it --name
4.4 断开容器
若要断开与容器的连接,并且关闭容器:容器内部执行如下命令
如果只想断开和容器的连接而不关闭容器:
ctrl + p + q
4.5 查看容器
1.只查看运行状态的容器:
docker ps
2.-a 查看所有容器
docker ps -a
3.只查看所有容器id:
docker ps -a -q
4.5 启动容器
# docker start name #容器ID也可以
这里的名字是状态里面NAMES列列出的名字,这种方式同样会让容器运行在后台
4.6 关闭容器
# docker stop name
# docker kill name --强制终止容器
4.7 杀死所有运行状态下的容器
# docker kill $(docker ps -q)
# docker stop `docker ps -q`
更多推荐
所有评论(0)