目录
前言:
在做美团的低空经济挑战赛,和在做robocup的时候,由于是线上仿真的形式,所以都用到了docker,包括docker镜像,容器,上传,网络等,但是一直不是特别理解,在过程中会出现很多问题,所以昨天学习了一下黑马的docker讲解,这里记录一下。
参考链接:02.Docker的安装_哔哩哔哩_bilibili
Docker 常用命令大全!!_docker常用命令-优快云博客
一、docker的安装
# 安装相关依赖
sudo apt-get install ca-certificates gnupg lsb-release
# 创建一个位置放docker仓库密钥
sudo mkdir -p /etc/apt/keyrings
# 添加docker官方密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 添加docker官方仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新apt镜像
sudo apt-get update
# 安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
docker安装完毕后,使用docker --version ,如果有下面显示,那么就安装成功了。
二、添加docker hub镜像仓库
当使用docker下载一些东西的时候,由于docker hub的服务器在国外,所以就会非常慢,所以需要给这个dockerhub添加国内的镜像仓库。
# 如果没有/etc/docker/daemon.json就创建一个,有就算了
sudo mkdir -p /etc/docker
cd /etc/docker
touch daemon.json
# 之后将下面的内容黏贴到touch daemon.json里面
{
"registry-mirrors":[ "https://docker.1ms.run", "https://doublezonline.cloud", "https://dislabaiot.xyz", "https://docker.fxxk.dedyn.io", "https://dockerpull.org", "https://docker.unsee.tech", "https://hub.rat.dev", "https://docker.1panel.live", "https://docker.nastool.de", "https://docker.zhai.cm", "https://docker.5z5f.com", "https://a.ussh.net", "https://docker.udayun.com", "https://hub.geekery.cn"]
}
# 重新启动docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
vim删除文件里面所有内容:
在命令模式下,输入:%d。%表示文件所有内容,d表示删除。之后回车就完了。
三、docker常用命令
更多参考:
Docker 常用命令大全!!_docker常用命令-优快云博客
四、本地目录挂载
所谓本地目录挂载,就是将本地的一个目录和docker容器里面的一个目录建立一个双向的关系,无论是从docker容器,还是从宿主机改变这个目录里面的内容,都会成效。这个只有在创建docker镜像的时候才可以指定。
docker run -it -d --name my_container -p 8080:80 -v /home/user/app:/app nginx:latest /bin/bash
####1
-d(--detach)
让容器在后台运行(以守护进程模式运行),而不是直接在当前终端中运行。这样你可以继续在当前终端执行其他命令,而容器会在后台持续运行。
#####2
-it
-i(--interactive):保持标准输入(STDIN)打开,即使没有连接到终端,允许你与容器进行交互。
-t(--tty):为容器分配一个伪终端(pseudo-TTY),模拟一个真实的终端环境,方便你在容器内进行命令行操作。
#####3
--name 要取的别名
为新创建的容器指定一个自定义的名称。这个别名可以方便你后续对容器进行管理,例如使用 docker start、docker stop、docker logs 等命令时,使用别名比使用容器的长 ID 更方便记忆和操作。
#####4
-p 宿主机端口:容器端口
进行端口映射,将宿主机上的一个端口映射到容器内的一个端口。这样,外部网络可以通过访问宿主机的指定端口来访问容器内运行的服务。例如,-p 8080:80 表示将宿主机的 8080 端口映射到容器的 80 端口。
######5
-v 宿主机文件存储位置:容器内文件位置
进行文件挂载,将宿主机上的一个目录或文件挂载到容器内的指定位置。这样,容器内对挂载位置的文件操作实际上是对宿主机上对应文件的操作,方便数据的共享和持久化。例如,-v /home/user/data:/app/data 表示将宿主机的 /home/user/data 目录挂载到容器内的 /app/data 目录。
#####6
镜像名:Tag
指定要使用的 Docker 镜像及其版本标签。镜像名是 Docker 镜像的名称,Tag 是镜像的版本标识,用于区分同一镜像的不同版本。如果不指定 Tag,默认使用 latest 标签。例如,nginx:1.21.1 表示使用版本为 1.21.1 的 Nginx 镜像
#######7
/bin/bash
在容器启动后,在容器内执行 /bin/bash 命令,启动一个交互式的 Bash shell,让你可以在容器内执行各种命令
五、docker网络连接
docker一旦安装到电脑上,他就会自然产生一个网桥,使用ifconfig可以看到,名称为docker0。
这些容器,自己启动不指定网桥的话,就会自动连接到这个网桥。在同一个网桥上连接的容器之间可以ping通,ip地址是自动分配的。这样就会存在一个问题,当一个容器关闭后再打开之后,它的ip地址就会发生改变,所以这样容器之间的通讯就会有麻烦。为了解决这个问题,需要自定义网桥,自定义网桥里面的容器可以通过容器名相互访问,那样ip地址变了也无所谓了。
六、网络连接常用指令
在同一个自定义网桥下的容器,可以直接通过ping 容器名来ping通。
# 创建网桥
docker network create 网桥名称
# 查看网桥
docker network ls
# 加入容器
docker network connect 网络名 容器名
# 将容器移除网桥
docker network disconnect 网络名 容器名
# 查看容器信息
docker inspect 容器名