docker使用笔记

安装

bash 复制代码
sudo apt update  #更新apt的软件列表
sudo apt-get install ca-certificates curl gnupg lsb-release software-properties-common #安装 安装docker时需要的工具,如果没有这些工具,下面的一些命令会执行失败
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -  # 添加Docker官方GPG密钥 这个是供apt用来验证docker的安装包没有被篡改的。
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"  #指定apt从哪里获取docker的安装包
sudo apt update  #再次更新apt的软件列表,因为上两条命令需要更新软件列表才会生效
sudo apt-get install docker-ce #这一行才是安装docker,前面都是铺垫
sudo usermod -aG docker $USER #把当前用户添加为docker用户组,这样当前用户使用docker时就不需要sudo了
sudo systemctl enable docker #设置启动项
sudo systemctl start docker #启动docker

使用

设置镜像源

在没有科学上网的情况下,我们是不能访问不了dockerhub的。这时候就需要国内镜像源。下面是设置国内镜像 源的方式 。

注意,下面列的镜像源不一定是每个 都能用的,有些可能已经挂了。设置好镜像源后,pull 可能要等好久好久,因为docker在一个一个尝试,直到找到一个能用的。

bash 复制代码
sudo vim  /etc/docker/daemon.json
bash 复制代码
{
    "registry-mirrors": [
	    "https://docker.registry.cyou",
	    "https://docker-cf.registry.cyou",
	    "https://dockercf.jsdelivr.fyi",
	    "https://docker.jsdelivr.fyi",
	    "https://dockertest.jsdelivr.fyi",
	    "https://mirror.aliyuncs.com",
	    "https://dockerproxy.com",
	    "https://mirror.baidubce.com",
	    "https://docker.m.daocloud.io",
	    "https://docker.nju.edu.cn",
	    "https://docker.mirrors.sjtug.sjtu.edu.cn",
	    "https://docker.mirrors.ustc.edu.cn",
	    "https://mirror.iscas.ac.cn",
	    "https://docker.rainbond.cc"
	  ]
}

更新至2025年1月19日 这些镜像地址可能会挂。

bash 复制代码
sudo systemctl daemon-reload		#重启daemon进程
sudo systemctl restart docker		#重启docker

下载镜像

从dockerhub上拉取

从dockerhub上拉取公开镜像不需要登录。如果从其他docker镜像提供商下载,需要先docker login xxx才能下载。

bash 复制代码
docker pull ubuntu:22.04   #从dockerhub或者镜像源中拉取标签为22.04的ubuntu镜像。

这里可能需要等很长一段时间才有反应,原因是它要依次访问镜像源,直到找到一个可用的镜像源。

bash 复制代码
docker images  #查看本机的镜像

从镜像中构建容器

镜像是只读的,可以根据这个镜像构建一个容器,容器才是一个可以运行的环境。

bash 复制代码
docker run [选项] 镜像名[:标签] [创建后执行的第一个命令]

例如

#以ubuntu:22.04为镜像创建一个名为ubuntu2204的容器,这个容器的/app目录与宿主当前目录相关联。创建后在容器内启动一个终端(-t的效果)并在这个终端上运行/bin/bash。并进入交互模式(-i的效果),使得宿主可以控制容器内。将容器内的80端口映射到宿主的8080端口

bash 复制代码
docker run --name ubuntu2204 -it -v  .:/app ubuntu:22.04 -p 8080:80 /bin/bash 

常用的选项还有

-d: 指定容器应该在后台运行。

-it: 让容器能够与终端进行交互。

--name: 指定容器的名称。

-p: 将容器端口映射到主机上的端口。 -p host_port:container_port

-v: 指定卷并将其挂载到容器中。 -v host_path:container_path

-u, --user string

docker常用命令

bash 复制代码
docker search 镜像名   #联网搜索镜像是否存在
docker images  #查看本机镜像
docker rmi 镜像名/镜像id  #删除镜像
docker ps -a    # 查看本机所有容器
docker run --name ubuntu2204 -it ubuntu:22.04 /bin/bash #以ubuntu:22.04为镜像创建一个名为ubuntu2204的容器,创建后在容器内启动一个终端(-t的效果)并在这个终端上运行/bin/bash。并进入交互模式(-i的效果)。 
docker start 容器名/容器id  #启动容器
docker attach 容器名/容器id #附加到容器上。注意,所有附加到同一个容器内的终端互相影响。大家控制的是容器内同一个终端(pts)。
docker exec -it ubuntu2204 /bin/bash #在容器内创建一个新终端。和其他终端互不影响。
ctrl + p + q   #离开容器,但是容器不会停止。但是,如果当前的终端不是主终端(第一个终端)使用这种方式离开后,是无法回到这个终端的(或者说我目前没找到回去的方法)。然而,这个终端是一直在运行的,这就是一个泄露,需要手动ps -aux 找到这个终端然后kill掉。
docker remove 容器名/容器id  # 删除容器 
相关推荐
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
LinXunFeng2 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
武子康3 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
Alsn866 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
闪闪发亮的小星星6 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq6 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
2601_961875246 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj6 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
阿米亚波6 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.6 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding