Docker是一个开源的应用容器引擎,基于Go语言。
可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。
镜像(Image)、容器(Container)与仓库(Repository),这三个是Docker中最基本也是最核心的概念,对这三个概念的掌握与理解,是学习Docker的关键。
# 查看版本
docker version
# 重启docker
systemctl start docker
# 查看docker状态
systemctl status docker
一、安装docker engine
1.Set up Docker's apt repository
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2.Install Docker packages
安装最新的版本
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3.running the hello-world image
sudo docker run hello-world
此命令会自动下载镜像并在容器中运行。
二、使用
1.镜像(Image)
什么是Docker的镜像?
Docker本质上是一个运行在Linux操作系统上的应用,而Linux操作系统分为内核和用户空间,无论是CentOS还是Ubuntu,都是在启动内核之后,通过挂载Root文件系统来提供用户空间的,而Docker镜像就是一个Root文件系统。
Docker镜像是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件,另外还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
镜像是一个静态的概念,不包含任何动态数据,其内容在构建之后也不会被改变。
下面的命令是一些对镜像的基本操作,如下:
列出所有镜像
docker image ls
从仓库拉取镜像
docker pull centos
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
拉取一个镜像,需要指定Docker Registry
的 地址和端口号,默认是Docker Hub;
还需要指定仓库名和标签,仓库名和标签唯一确定一个镜像,而标签是可能省略,如果省略,则默认使用latest作为标签名;
另外,仓库名则由作者名和软件名组成。
那么,我们上面使用CentOS,那是因为省略作者名,则作者名library,表示Docker官方的镜像,所以上面的命令等同于:
docker pull library/centos:latest
因此,如果拉取非官方的第三方镜像,则需要指定完整仓库名,如下:
docker pull mysql/mysql-server:latest
运行镜像
docker run -it centos /bin/bash
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
删除镜像
dockere image rm image_name/image_id
2.容器(Container)
Docker的镜像是用于生成容器的模板。镜像与容器的关系,就是面向对象编程中类与对象的关系,我们定好每一个类,然后使用类创建对象。对应到Docker的使用上,则是构建好每一个镜像,然后使用镜像创建我们需要的容器。
使用docker run命令通过镜像创建一个全新的容器
docker run hello-world
启动一个已经停止运行的容器
docker start container_id
停止正在运行的容器
docker container stop container_id
查看所有容器
docker container ls
删除容器
# container_id表示容器id,通过docker ps可以看到容器id
docker container rm container_id
# 删除所有容器
docker rm $(docker ps -q)
在运行的容器中执行指令
# container_id表示容器的id,command表示Linux命令,如/bin/bash
docker exec -it container_id command
3.仓库(Repository)
我们需要一个可以让我们集中存储和分发镜像的服务,就像Github可以让我们自己存储和分发代码一样。
Docker Hub就是Docker提供用于存储和分布镜像的官方Docker Registry,也是默认的Registry,其网址为https://hub.docker.com。前面我们使用docker pull命令便从Docker Hub上拉取镜像。
Docker Hub有很多官方或其他开发提供的高质量镜像供我们使用,当然,如果要将我们自己构建的镜像上传到Docker Hub上,我们需要在Docker Hub上注册一个账号,然后把自己在本地构建的镜像发送到Docker Hub的仓库当中,Docker Registry包含很多个仓库,每个仓库对应多个标签,不同标签对应一个软件的不同版本。
问题解决
1.Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
可能是上次docker没有正常退出导致没有正常启动,解决方法
systemctl start docker.service
或者
sudo service docker restart
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?