容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止,容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理。
程序:代码,软件,命令
进程:正在运行的程序
虚拟机: 硬件cpu支持(vt虚拟化),模拟计算硬件,走正常的开机启动
bios开机自检–根据bios启动项–读取硬盘第一个扇区grub,uefi,centos7,加载内核,启动系统第一个进程/sbin/init systemd
容器:不需要硬件cpu的支持,共用宿主机内核,启动容器的第一个进程
容器优势:启动快,性能高,损耗少,轻量级
100虚拟机 100个服务 10宿主机
100容器 100个服务 6宿主机
#安装docker-ce
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker
#验证
[root@docker01 ~]# docker version
Client: Docker Engine - Community
Version: 24.0.2
API version: 1.43
Go version: go1.20.4
Git commit: cb74dfc
Built: Thu May 25 21:55:21 2023
OS/Arch: linux/amd64
Context: default
# 这是因为docker服务没有启动
Cannot connect to the Docker daemon at
unix:///var/run/docker.sock. Is the docker daemon running?
[root@docker01 ~]# systemctl start docker
[root@docker01 ~]# systemctl enable docker
[root@docker01 ~]# docker version
Client: Docker Engine - Community
Version: 24.0.2
API version: 1.43
Go version: go1.20.4
Git commit: cb74dfc
Built: Thu May 25 21:55:21 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 24.0.2
API version: 1.43 (minimum version 1.12)
Go version: go1.20.4
Git commit: 659604f
Built: Thu May 25 21:54:24 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.21
GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc:
Version: 1.1.7
GitCommit: v1.1.7-0-g860f061
docker-init:
Version: 0.19.0
GitCommit: de40ad0
小技巧:
# 用yum命令安装软件,收集安装包,在没有网络的情况下软件
vim /etc/yum.conf
# 用yum下载rpm包,下载安装完之后就删了。如果keepcache=1,rpm包就不删了
keepcache=0
# 缓存目录: /var/cache/yum
# 收集rpm包:
find /var/cache/yum -type f -name "*.rpm"
mkdir docker1903_rpm
find /var/cache/yum -type f -name "*.rpm" | xargs mv -t docker1903_rpm
tar zcf docker1903_rpm.tar.gz docker1903_rpm
# 进行安装软件
cd docker1903_rpm
yum localinstall -y "*.rpm"
docker是一个cs架构, docker主要:镜像 容器 仓库 网络 存储 监控
docker是一个软件的打包技术.
docker run -d -p 80:80 nginx:alpine
run 创建并启动一个容器
-d 放后台启动
-p 端口映射
nginx:latest docker镜像名称
# docker镜像命令都被分成了组,镜像有关的命令
[root@docker01 ~]# docker image
build history import inspect load ls prune pull push rm save tag
docker search 搜索镜像, 优先选官方,stars数量多
docker pull 拉取镜像(下载镜像)
docker push 推送镜像(上传镜像)
docker save 导出镜像
例子:docker save centos:7 -o docker_centos7.tar.gz
docker load 导入镜像(import导入镜像没有导入名称)
例子: docker load -i docker_nginx.tar.gz
docker images 查看镜像列表(或者 docker image ls)
docker rmi 删除镜像(docker image rm )
例子:docker rmi 1d12345ds
docker tag 镜像id 给镜像打标签
例子:doker image tag 1d12345ds nginx:v1
docker image inpect 看镜像的属性
例子: docker image inpect nginx:v1
docker image prune 清理没有名称或无效的镜像(清理黑户)
例子: docker image import nginx.tar.gz
docker image prune # 因为import导入的镜像不带名称所以会被清理掉
小提示:
官方镜像 docker.io/library/nginx:1.18-alpine
用户镜像 docker.io/dong/alpine:3.9
第三方镜像 index.tenxcloud.com/system_containers/metrics-server-amd64:v0.3.1
docker自动补全命令
# 安装自动补全命令
yum install bash-completion
# 启用自动补全
source /usr/share/bash-completion/bash_completion
# docker镜像命令都被分成了组,容器相关的命令
[root@docker01 ~]# docker container
attach create export logs port restart start top wait
commit diff inspect ls prune rm stats unpause
cp exec kill pause rename run stop update
docker run 创建并启动容器
例子:docker run -d -it -p 80:80 nginx:latest
docker create 创建容器 --name
docker start 启动容器
docker stop 停止容器
docker restart 重启容器
docker kill 强制停止容器
docker ps 查看容器列表 -a 查看所有容器
docker rm 删除容器
批量删除所有容器 docker rm -f `docker ps -
a -q`
docker exec 进入正在运行的容器(分配一个新终
端)
例子: docker exec -it 容器id/容器名字
/bin/bash(/bin/sh)
docker attach 进入正在运行的容器(使用相同的终
端),偷偷离开的快捷键ctrl +p,ctrl +q
容器想要放在后台一直运行的话,那么容器的初始命令,必须夯住(前台运行),否则容器就会退出。
前台运行
nginx -g 'daemon off;'
/usr/sbin/php-fpm --nodaemonize
docker run
-p 宿主机端口:容器端口
-p 宿主机ip1:宿主机端口:容器端口 (多个容器同时
使用 80 端口)
-p 宿主机ip1::容器端口 随机端口映射
-p 宿主机ip1::容器端口/udp 使用udp协议做随机
端口映射
-p 80 :80 -p 3306 :
-p 1111 -1119:1111-1119 端口范围映射
-P 自动随机端口映射
docker run
-v 宿主机绝对目录:容器目录
-v 容器目录 #创建一个随机卷,来持久化容器
的目录下的数据
-v 卷名:容器目录 #创建一个固定名字的卷,来持
久化容器的目录下的数据
--volumes-from 跟某一个容器挂载所有相同的卷
小练习: 只启动一个nginx容器,要求访问 80 端口,出现nginx默认欢迎首页,访问 81 端口,出现小鸟飞飞。