Docker基础入门:从零开始学习容器化技术
- 一、Docker基础
-
- 1.1、Docker起源
- 1.2、Docker概念
- 1.3、Docker优势
- [1.4、Docker 的组成](#1.4、Docker 的组成)
- 二、Docker安装
-
- 2.1、卸载旧版Docker
- 2.2、需要的安装包依赖
- 2.3、设置镜像仓库
- 2.4、更新yum软件包索引
- 2.5、安装Docker--社区版
- 2.6、配置镜像加速(阿里云加速器地址--每个人地址不一致):
- [2.7、启动 | 停止Docker](#2.7、启动 | 停止Docker)
- 2.8、测试--hello-world
- 2.9、查看Docker镜像
- 2.10、Docker进程查看
- 三、Docker常用命令
- 四、容器命令
- 五、Docker其他命令
|-----------------------------|
| 💖The Begin💖点点关注,收藏不迷路💖 |
一、Docker基础
1.1、Docker起源
Docker起源于2013年,由Docker公司(前身为dotCloud公司)创造和推广。它是一个开源的容器化平台,旨在简化应用程序的部署和管理。
在过去,应用程序的部署和运行环境往往存在着依赖关系和配置差异,这导致了许多问题,例如运行环境不兼容、难以移植和难以管理等。为了解决这些问题,Docker应运而生。
1.2、Docker概念
Docker 是一个可以将应用程序及其依赖打包到几乎可以在任何服务器上运行的容器的工具。
Docker的核心概念是容器,它是一种轻量级且独立的运行环境,可以在任何操作系统上运行。与传统的虚拟化技术相比,容器不需要额外的操作系统,它们共享主机的内核,因此更加高效和灵活。
1.3、Docker优势
通过使用Docker,开发人员可以将应用程序及其依赖项打包成一个容器,并在任何支持Docker的环境中运行,而无需担心环境差异和配置问题。这使得应用程序的部署变得简单、快速和可靠。
Docker还提供了一套强大的工具和功能,如镜像管理、容器编排和网络管理等,使得应用程序的管理和扩展变得更加容易。此外,Docker的生态系统非常丰富,有大量的镜像和工具可供使用,为开发人员提供了更多的选择和便利。
1.4、Docker 的组成
1、Docker 主机(Host):
一个物理机或虚拟机,用于运行Docker服务进程和容器,也称为宿主机,node节点。
2、Docker 服务端(Server):
Docker守护进程,运行docker容器。
3、Docker 客户端(Client):
客户端使用docker 命令或其他工具调用docker API。
4、Docker 仓库(Registry):
保存镜像的仓库(公有和私有仓库), 官方仓库:,可以搭建私有仓库harbor。
5、Docker 镜像(Images):
镜像可以理解为创建实例使用的模板,用来创建容器服务,可以通过镜像创建多个容器。
6、Docker 容器(Container):
容器是从镜像生成对外提供服务的一个或一组服务。
二、Docker安装
前提:
python
#1、系统内核为3.10以上、要求系统为64位(x86_64)
[root@zyl-server ~]# uname -r
3.10.0-1160.el7.x86_64
[root@zyl-server ~]#
#2、查看系统版本
[root@zyl-server ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
[root@zyl-server ~]#
2.1、卸载旧版Docker
python
sudo yum remove docker*
###或者使用
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.2、需要的安装包依赖
python
yum install -y yum-utils
2.3、设置镜像仓库
python
###使用国内镜像仓库地址
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo #国外
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #国内
2.4、更新yum软件包索引
python
yum makecache fast
2.5、安装Docker--社区版
相关版本:docker-ce(社区版)、 docker-ee(企业版)。
docker-ce ----->社区版
docker-ce-cli ----->命令行
containerd.io ----->docker容器化运行环境
python
##默认不指定版本则安装最新版。
yum install docker-ce docker-ce-cli containerd.io
##指定版本安装
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
2.6、配置镜像加速(阿里云加速器地址--每个人地址不一致):
如何获取自己阿里云的镜像加速地址:
1、登录后打开阿里云的控制台
2、在控制台中找到"容器镜像服务"
python
###1、通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://lqwtpdhx.mirror.aliyuncs.com"]
}
EOF
###2、修改保存后,重启Docker以使配置生效。
sudo systemctl daemon-reload
sudo systemctl restart docker
##3、查看配置是否生效。
##执行 docker info,查看是否含有如下信息(最后):
Registry Mirrors:
https://lqwtpdhx.mirror.aliyuncs.com/
2.7、启动 | 停止Docker
python
systemctl start docker #启动
systemctl stop docker #停止
systemctl restart docker #重启
systemctl status docker #查看状态
systemctl enable docker #开机自启
[root@zyl-server ~]# systemctl start docker
[root@zyl-server ~]# docker version #查看是否安装成功
2.8、测试--hello-world
python
docker run hello-world
2.9、查看Docker镜像
python
[root@zyl-server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 23 months ago 13.3kB
[root@zyl-server ~]#
2.10、Docker进程查看
python
[root@zyl-server ~]# ps -ef |grep docker
root 1502 1 0 22:07 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 1794 1266 0 22:16 pts/0 00:00:00 grep --color=auto docker
[root@zyl-server ~]#
三、Docker常用命令
3.1、帮助命令
python
docker version #docker版本
docker info #查看系统信息,镜像和容器数量
docker 命令 --help #帮助命令
3.2、镜像查找命令
python
#1、查看本机上的镜像
docker images
[root@zyl-server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 23 months ago 13.3kB
[root@zyl-server ~]#
#可选项
docker images -a #列出本地所有镜像,含历史镜像
docker images -q #只显示镜像id
python
#2、镜像搜索,如搜索nginx、mysql
docker search nginx
docker search mysql
#可选项,通过收藏等过滤
docker search nginx --filter=STARS=3000
docker search mysql --filter=STARS=3000
#3、 镜像搜索前5个(默认前20)
docker search --limit 5 镜像名称
3.3、镜像下载命令
python
docker pull mysql #镜像下载
docker pull 镜像名[:tag] ,如果不写tag,默认最后一个latest,下载最新版本
docker pull mysql:5.7 #指定版本下载
3.4、镜像删除命令
python
docker rmi -f 镜像id #删除指定镜像
docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
docker rmi -f $(docker images -aq) #删除所有镜像
3.5、容器、数据卷、镜像等空间查看
python
[root@zyl-server ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 13.26kB 0B (0%)
Containers 1 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
[root@zyl-server ~]#
四、容器命令
镜像是创建docker容器的基础,有了镜像,才可以下载容器。即容器是镜像的运行实体。而仓库的作用则是存储和分发镜像。
4.1、下载容器
python
docker pull nginx #下载容器
4.2、启动容器
python
docker run [可选参数] image
参数说明
--name="Name" 容器名,用来区分容器
-d 后台方式运行
-it 使用交互式方式运行,进入容器查看命令
-p 指定容器端口 8080:8080
-P 随机指定端口
4.2、测试---交互式启动centos
python
1、启动、 #交互式启动并进入容器
[root@zyl-server ~]# docker run -it centos /bin/bash
[root@11122b0ec822 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@11122b0ec822 /]#
2、退出容器
exit #退出并停止运行
Ctrl+P+Q #退出不停止
docker ps 列出所有运行中的容器
docker ps -a # 列出正在运行的容器,并列出历史运行过的容器
docker ps -n=? #显示最近创建的容器
[root@zyl-server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11122b0ec822 centos "/bin/bash" About a minute ago Up About a minute distracted_wing
[root@zyl-server ~]# docker ps -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11122b0ec822 centos "/bin/bash" 2 minutes ago Up 2 minutes distracted_wing
[root@zyl-server ~]#
4.3、测试---后台启动容器
python
#命令
docker run -d 镜像名 ##重启之后不会自动运行
docker run -d --restart=always 镜像名 ##重启之后自动运行容器
#启动后centos容器停止运行,原因,docker使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会停止运行
[root@zyl-server ~]# docker run -d centos
ab35c8c20470fe9faaed153b1f245c557838d5a7006c9d9b3cfbd5042dcf8923
[root@zyl-server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@zyl-server ~]#
解决---使用命令:
docker run -t -d centos
[root@zyl-server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
780530eaf656 centos "/bin/bash" 4 seconds ago Up 4 seconds wizardly_dhawan
95420eae9ad9 nginx "/docker-entrypoint...." 10 minutes ago Up 10 minutes 80/tcp great_pasteur
[root@zyl-server ~]#
4.3、删除容器
python
docker rm 容器id #删除指定容器,不能删除正在运行的容器
docker rm -rf $(docker ps -aq) #全部删除
docker ps -a -q|xargs docker rm #全部删除
4.4、常用容器命令
python
docker start 容器id/容器名 ##启动
docker restart 容器id/容器名 ##重启
docker stop 容器id/容器名 ##停止
docker kill 容器id/容器名 ##kill进程
docker ps ###列出当前运行的容器
docker ps | grep 容器id/容器名 ## 查看进程是否正常
docker ps -a ###列出所有容器
五、Docker其他命令
5.1、查看日志
python
docker logs -t -f --tail 818a1b71af6c
docker logs -t -f --tail [条数] 818a1b71af6c 显示10条
[root@zyl-server ~]# docker logs -t -f --tail 95420eae9ad9
"docker logs" requires exactly 1 argument.
See 'docker logs --help'.
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
[root@zyl-server ~]#
5.2、查看容器进程信息
python
docker top 容器id
[root@zyl-server ~]# docker top 95420eae9ad9
UID PID PPID C STIME TTY TIME CMD
root 11067 11047 0 23:11 ? 00:00:00 nginx: master process nginx -g daemon off;
101 11111 11067 0 23:11 ? 00:00:00 nginx: worker process
101 11112 11067 0 23:11 ? 00:00:00 nginx: worker process
[root@zyl-server ~]#
5.3、查看容器元数据
python
docker inspect 容器id
[root@zyl-server ~]# docker inspect 95420eae9ad9
5.4、查看、进入当前正在运行的容器
python
方式一、docker exec -it 容器id /bin/bash #进入容器,开启一个新的终端,可以命令操作
[root@zyl-server ~]# docker exec -it 780530eaf656 /bin/bash
[root@818a1b71af6c /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@818a1b71af6c /]#
方式二、docker attach 容器id #进入正在运行的终端,不会启动新进程
[root@zyl-server ~]# docker attach 780530eaf656
[root@818a1b71af6c /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@818a1b71af6c /]#
5.5、从容器拷贝文件到主机
python
docker cp 容器id:容器路径 目的主机路径
[root@zyl-server ~]# docker exec -it 780530eaf656 /bin/bash
[root@780530eaf656 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@780530eaf656 /]#
[root@780530eaf656 /]# cd home/
[root@780530eaf656 home]# touch test.java
[root@780530eaf656 home]# ls
test.java
[root@780530eaf656 home]# pwd
/home
[root@780530eaf656 home]# exit ##退出不停止
exit
[root@zyl-server ~]#
###从docker 内部的小型centos 拷贝文件到主机
[root@zyl-server ~]# docker cp 780530eaf656:home/test.java /
Successfully copied 1.54kB to /
[root@zyl-server ~]# cd /
[root@zyl-server /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test.java tmp usr var
[root@zyl-server /]#
|---------------------------|
| 💖The End💖点点关注,收藏不迷路💖 |