一、docker基础,环境准备
前面了解了一下chroot和LXC容器技术,有了前面的引入,今天就开始学习docker了。
首先,docker是通过内核虚拟化技术实现的,namespace用于提供隔离环境,cgroup作资源限制;
因为docker本质上属于一个进程,如果占用资源太多,会out of memory直接杀掉进程;
正因为容器(进程)容易死,才会有后面的K8S(K8S容器编排工具),提供容器的高可用;
喊句口号:build,ship and run any app, any where
因为容器有自己独自的系统文件rootfs,所以如果说在容器中安装了软件,打包以后,移动到任何环节,软件运行使用的文件都没变过,所以可以运行在anywhere;
安装docker-ce,步骤摘自阿里云
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
安装完成后,可以通过命令查看docker版本
[root@docker-1-26 ~]# docker version Client: Docker Engine - Community #客户端信息,docker-ce 社区版 Version: 19.03.13 API version: 1.40 Go version: go1.13.15 #go语言编写 Git commit: 4484c46d9d Built: Wed Sep 16 17:03:45 2020 OS/Arch: linux/amd64 #系统和架构 Experimental: false #实验版本,否 Server: Docker Engine - Community #服务端 Engine: Version: 19.03.13 API version: 1.40 (minimum version 1.12) Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 17:02:21 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.3.7 GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683 [root@docker-1-26 ~]#
docker三大组件:镜像、容器、仓库。启动容器需要镜像文件。镜像文件存放在仓库中。其实还有存储(卷)、网络
启动第一个容器:
[root@docker-1-26 ~]# cat /etc/docker/daemon.json #配置docker镜像加速,直接下载的话会很慢
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
} #是否加速成功,可以通过docker info查看
[root@docker-1-26 ~]#
[root@docker-1-26 ~]# docker run -d -p 80:80 nginx #run:创建并运行一个容器;-d:置于后台;-p:端口映射;nginx:docker镜像的名字
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
bb79b6b2107f: Downloading
5a9f1c0027a7: Download complete
b5c20b2b484f: Download complete
166a2418f7e8: Download complete
1966ea362d23: Download complete
latest: Pulling from library/nginx
bb79b6b2107f: Pull complete
5a9f1c0027a7: Pull complete
b5c20b2b484f: Pull complete
166a2418f7e8: Pull complete
1966ea362d23: Pull complete
Digest: sha256:aeade65e99e5d5e7ce162833636f692354c227ff438556e5f3ed0335b7cc2f1b
Status: Downloaded newer image for nginx:latest #nginx标识镜像名称,latest表示tag
21790a0c8078413011f089067abab7d3cb466cf966f32a941d34fb86c701e923
这样就可以直接访问NGINX了
在宿主机上查看端口状态发现:
[root@docker-1-26 image]# netstat -tnlup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1054/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1591/master tcp6 0 0 :::80 :::* LISTEN 4717/docker-proxy #创建时端口映射为80,所以这里可以查看到相应端口 tcp6 0 0 :::22 :::* LISTEN 1054/sshd tcp6 0 0 ::1:25 :::* LISTEN 1591/master
[root@docker-1-26 image]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest c39a868aad02 6 days ago 133MB [root@docker-1-26 image]#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言