Docker学习1----安装、镜像、容器、dockerfile
Docker安装
添加源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
iptables -F
iptables -X
iptables -Z
iptables -save
getenforce
systemctl stop firewalld
systemctl disable firewalld
打开docker网络转发
cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0 net.ipv4.ip_forward=1
EOF
#重新加载配置文件
sysctl -p /etc/sysctl.d/docker.conf
添加源
yum install -y yum-utils device-mapper-persistent-data lvm2 #安装依赖
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast #更新yum缓存
配置源加速器
## https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/docker
vi /etc/docker/daemon.json
{
"registry-mirrors" : [
"https://8xpk5wnt.mirror.aliyuncs.com"
]
}
查看docker可用版本
yum list docker-ce --showduplicates | sort -r
安装
yum install docker-ce-20.10.6 -y
设置开机启动
systemctl enable docker
systemctl daemon-reload
命令
docker version
镜像
镜像原理
a. Linux内核 ——> 发行版 ——> 镜像层1 ——> 镜像层2 ——> 容器层
b. 容器层(可写) & 镜像层(不可写)
c. 容器写入时复制特性
获取镜像
docker search 镜像名:tag #搜索镜像
docker pull #下载镜像
查看镜像
docker images | docker image ls #查看本地镜像
docker images ubuntu[:tag] #查看具体的镜像 tag标签参数
docker images --format "{{.ID}}-{{.Repository}}" #格式化查看镜像
docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" #表格样式查看镜像
删除镜像
docker rmi 镜像名称|id
docker rm 容器id # 删除容器
docker rmi `docker images -aq` # 批量删除镜像
docker rm `docker ps -aq` # 批量删除容器
docker image prune # 删除 dangling 镜像
导出/导入镜像
docker image save centos:7.8.2023 > /opt/centos7.8.2023.tgz
docker image load -i /opt/centos7.8.2023.tgz
查看镜像信息
docker image inspect 镜像id
修改镜像名字
docker tag 镜像id 新名字
容器管理
优点
容器最大优势的系统隔离
- 独立的进程空间、网络空间、文件系统空间
- 独立的namespace,环境隔离,
- 直接使用宿主机的硬件配置
运行容器
1. docker run -it centos bash # 开启一个容器,且在容器内执行某个命令
2. docker run ping baidu.com # 开启一个容器,让它运行某个程序,属于前台运行,会卡主一个终端
3. docker run -d ping baidu.com # 开启一个容器,后台运行
4. docker run -d --rm --name 名字 ping baidu.com # 开启一个容器,后台运行,退出时自动删除记录 (docker ps -a 看不到)
-d 后台运行
-p 端口映射 宿主机端口:容器内端口
-P 把容器内运行容器的端口随机映射到宿主机一个端口
-it 交互式命令操作
--rm 退出时自动删除记录 (docker ps -a 看不到)
--name 设置容器的名字
bash 开启一个终端
exec 进入容器
注意:一个容器至少必须有一个程序在前台运行,否则这个容器就会自动退出,容器内没有后台进程概念必须是前台运行
查看容器日志
docker logs 0ac7fc005204 #查看所有日志
docker logs -f 0ac7fc005204 #查看刷新日志
docker logs 0ac7fc005204 | tail -5 #查看最后五条日志
查看容器信息
docker container inspect 容器id
查看容器端口转发情况
docker port 容器id
删除容器
docker rm -f 容器id # -f 强制删除
查看容器内进程
docker top 容器id
docker stats 容器id
dockerfile
基础指令
FROM # 基础镜像
MAINTAINER # 维护者
RUN # 运行安装程序
ADD sDir deDir # copy宿主机文件到容器内,1.文件会自动解压 2.sDir可以是url,但不会自动解压了
WORKDIR # 设置当前工作目录
VOLUME ["/data1","data2"] # 设置卷,挂载主机目录
EXPOSE # 指定对外端口
CMD ["param1","param2"] # 指定容器启动后做什么,会被docker run后面的参数覆盖!!
其他指令
COPY # 复制文件
ENV # 环境变量 构建镜像和运行容器都可以使用
ARG # 设置环境变量 构建镜像时使用,容器运行时就消失了
ENTRYPOINT # 容器启动后执行的命令 作用和CMD一样。当指定了ENTRYPOINT之后,CMD指令的语义就有了变化,就是把CMD的内容当作参数传递给ENTRYPOINT指令(可以防止CMD指令在启动容器时被传入的参数覆盖
USER # 切换用户
构建镜像
docker build -t newName:TAG ./Dockerfile
播种和收获通常不在一个季节,而中间的过程叫做坚持~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2023-01-10 Redis——客户端