目录
一、docker基本组成
主要是三部分:
镜像:类似一个模板,其他地方可以直接进行下载使用。
容器:类似一个轻量化linux系统,即运行的镜像。
仓库:存放容器的地方,分成公有和私有
二、docker容器运行流程
运行流程:
第一:查找本地是否已经有下载所需镜像
第二:如果存在,直接运行即可
第三:如果不存在,则去docker hub下载,判断hub中是否有该镜像,没有的话返回错误,有的话下载到本地,运行。
底层原理:
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过客户端访问!Docker Server接收到Docker-Client的指令,就会执行这个指令!
Docker为什么比VM Ware快?
1、Docker比虚拟机更少的抽象层
2、docker利用宿主机的内核,VM需要的是Guest OS
Docker新建一个容器的时候,不需要像虚拟机一样重新加载一个操作系统内核,直接利用宿主机的操作系统,而虚拟机是需要加载Guest OS。
三、docker安装、卸载
安装
1、查看内核版本、系统版本相关信息
➜ ~ uname -r
3.10.0-1160.41.1.el7.x86_64
➜ ~ 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"
2.卸载之前可能安装好的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.安装yum相关工具
yum install -y yum-utils
4.配置阿里云
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo #国外地址
# 设置阿里云的Docker镜像仓库
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #国内地址
5.更新yum软件包索引
yum makecache fast
6.安装docker相关内容
docker-ce 是社区版,docker-ee 企业版
命令: 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
7.启动docker并设置开机自启动
#启动并设置开机自启动
systemctl enable docker --now
# 查看当前版本号,是否启动成功
docker version
卸载
# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2. 删除资源 /var/lib/docker是docker的默认工作路径
rm -rf /var/lib/docker
四、基本命令
docker version #查看docker的版本信息
docker info #查看docker的系统信息,包括镜像和容器的数量
docker COMMAND --help #帮助命令(可查看可选的参数)
镜像命令
1.查看本地所有镜像
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 6 months ago 231MB
#解释:
1.REPOSITORY 镜像的仓库源
2.TAG 镜像的标签
3.IMAGE ID 镜像的id
4.CREATED 镜像的创建时间
5.SIZE 镜像的大小
# 可选参数
-a/--all 列出所有镜像
-q/--quiet 只显示镜像的id
2.查找镜像(搜索远程仓库中的镜像)
➜ ~ docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12401 [OK]
mariadb MariaDB Server is a high performing open sou… 4777 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 918 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 501 [OK]
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 93
centos/mysql-57-centos7 MySQL 5.7 SQL database server 92
bitnami/mysql Bitnami MySQL Docker Image 69 [OK]
ubuntu/mysql MySQL open source fast, stable, multi-thread… 29
circleci/mysql MySQL is a widely used, open-source relation… 25
mysql/mysql-router MySQL Router provides transparent routing be… 23
google/mysql MySQL server for Google Compute Engine 21 [OK]
arey/mysql-client Run a MySQL client from a docker container 20 [OK]
vmware/harbor-db Mysql container for Harbor 10
mysqlboy/mydumper mydumper for mysql logcial backups 3
mysqlboy/docker-mydumper docker-mydumper containerizes MySQL logical … 3
bitnami/mysqld-exporter 2
ibmcom/mysql-s390x Docker image for mysql-s390x 2
mysql/mysql-operator MySQL Operator for Kubernetes 0
mirantis/mysql 0
mysqlboy/elasticsearch 0
mysqleatmydata/mysql-eatmydata 0
cimg/mysql 0
mysql/ndb-operator MySQL NDB Operator for Kubernetes 0
mysqled25519/mysqled25519 0
ibmcom/tidb-ppc64le TiDB is a distributed NewSQL database compat… 0
# 查看STARS大于3000的mysql相关镜像
➜ ~ docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12401 [OK]
mariadb MariaDB Server is a high performing open sou… 4777 [OK]
3.下载镜像到本地
➜ ~ docker pull mysql
Using default tag: latest #不写tag默认是最新的
latest: Pulling from library/mysql #指定版本 docker pull mysql:5.7
72a69066d2fe: Pull complete #分层下载 镜像核心就是联合文件系统-- 一层一层的
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
4.删除镜像
#删除指定的镜像id
docker rmi -f 镜像id
#删除多个镜像id
docker rmi -f 镜像id 镜像id 镜像id
#删除全部的镜像id
docker rmi -f $(docker images -aq)
容器命令
1.运行命令
docker run [可选参数] image
#参数说明
--name="名字" 指定容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
(
-p ip:主机端口:容器端口 配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P 随机指定端口(大写的P)
例子,运行centos并进入
➜ ~ docker run -it centos /bin/bash
[root@3ace51e0fb05 /]#
2.退出容器命令
exit #停止并退出容器
Ctrl+P+Q #不停止容器退出,该命令是快捷键
3.查看容器运行情况
docker ps # 列出当前正在运行的容器
# 参数说明
-a # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q # 只显示容器的编号
4.查看容器中的进程信息
#docker容器后台运行,必须要有一个前台的进程,否则会自动停止
#编写shell脚本循环执行,使得centos容器保持运行状态
➜ ~ docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
9f278434e57d5cad917f8cd849ddf9e115bb86da3278781dc6e43255d904e515
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f278434e57d centos "/bin/sh -c 'while t…" 5 seconds ago Up 5 seconds elated_kirch
# 查看容器内部进程信息
➜ ~ docker top 9f278434e57d
UID PID PPID C STIME TTY TIME CMD
root 3874 3856 0 17:53 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
root 3933 3874 0 17:53 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
➜ ~
4.删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
5.启动停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前运行的容器
docker kill 容器id #强制停止当前容器
6.提交自己修改的容器,提交到本地
docker commit 命令提交容器成为一个新的版本
docker commit -m=“提交的描述信息” -a="作者" 容器id 目标镜像名:[TAG]
其他命令
1.日志相关
docker logs -tf 容器id
docker logs --tail num 容器id #num为要显示的日志条数
➜ ~ docker logs -tf --tail 10 ac9aca6d9915
2022-04-13T10:11:28.058528684Z hi
2022-04-13T10:11:33.063423040Z hi
2022-04-13T10:11:38.070628146Z hi
2022-04-13T10:11:43.076990468Z hi
2022-04-13T10:11:48.082237532Z hi
2022-04-13T10:11:53.085400262Z hi
2022-04-13T10:11:58.090633074Z hi
2022-04-13T10:12:03.094285584Z hi
2022-04-13T10:12:08.099404783Z hi
2022-04-13T10:12:13.104262303Z hi
2.查看容器相关详细信息
➜ ~ docker inspect ac9aca6d9915 # docker inspect 容器id
[
{
"Id": "ac9aca6d991515ac5542106abf53bfb3187bb5e35a0e4818c9eb18db07daf5b9",
"Created": "2022-04-13T10:11:27.733833798Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hi;sleep 5;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 4280,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-04-13T10:11:28.074513327Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/ac9aca6d991515ac5542106abf53bfb3187bb5e35a0e4818c9eb18db07daf5b9/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/ac9aca6d991515ac5542106abf53bfb3187bb5e35a0e4818c9eb18db07daf5b9/hostname",
"HostsPath": "/var/lib/docker/containers/ac9aca6d991515ac5542106abf53bfb3187bb5e35a0e4818c9eb18db07daf5b9/hosts",
"LogPath": "/var/lib/docker/containers/ac9aca6d991515ac5542106abf53bfb3187bb5e35a0e4818c9eb18db07daf5b9/ac9aca6d991515ac5542106abf53bfb3187bb5e35a0e4818c9eb18db07daf5b9-json.log",
"Name": "/wizardly_colden",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
.......
3.进入容器,进行修改容器内部文件
# 方法一 docker exec -it 容器id /bin/bash
# 方法二 docker attach 容器id
➜ ~ docker exec -it ac9aca6d9915 /bin/bash
[root@ac9aca6d9915 /]# pwd
/
[root@ac9aca6d9915 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
➜ ~ docker attach ac9aca6d9915
hi
hi
4.拷贝文件(主机与容器之间的操作)
#拷贝容器的文件到主机中
docker cp 容器id:容器内路径 目的主机路径
#拷贝宿主机的文件到容器中
docker cp 目的主机路径 容器id:容器内路径
参考链接:https://blog.csdn.net/huangjhai/article/details/118854733