您现在的位置是:网站首页> 边看边学

docker 常用命令

摘要

Docker 1小时快速上手教程,无废话纯干货

点击查看课件

点击查看Docker Desktop安装使用

点击查看docker在线教程

Docker 不是独立的虚拟机,两者的核心区别在于虚拟化层次和资源隔离级别

Docker 容器的本质

共享内核:容器内的进程直接运行在宿主机内核上(例如在 Linux 宿主机上运行 Ubuntu 容器时,实际使用的是宿主机 Linux 内核)。

用户空间隔离:通过 Namespace 隔离进程的视图(如文件系统、网络、PID 等),通过 Cgroups 限制资源使用(如 CPU、内存)。

轻量级:容器仅是进程及其依赖的打包,无需虚拟化硬件或运行完整操作系统。


为什么容器不是虚拟机?

无法运行不同内核的系统:例如,Linux 宿主机上的 Docker 容器无法直接运行 Windows 程序(需借助特殊工具),而虚拟机可以运行任何操作系统。

进程级隔离:容器内的进程在宿主机上可见(但被隔离),虚拟机内的进程完全独立。

依赖宿主机的内核:容器镜像仅包含用户空间的程序和依赖库,不含内核,因此容器无法脱离宿主机内核独立运行。


Docker 容器和镜像之间有什么关系?

Docker 容器和镜像之间的关系可以理解为蓝图和实例的关系:

1、定义: Docker 镜像是容器的只读模板,包含了运行容器所需的代码、库、环境变量和配置文件

2、实例化: 当 Docker 镜像运行时,它会成为一个容器,即镜像的实时、可写版本

3、层叠构建: Docker 镜像是通过一系列的层叠构建而成,每个层代表镜像构建过程中的一个步骤。

默认的源地址:

"registry-mirrors": [

    "https://hub.docker.com"

  ]


最新可用地址可以直接问AI:

如:https://docker-0.unsee.tech/


国内可用的源:

"registry-mirrors": [

    "https://docker.m.daocloud.io",

    "https://noohub.ru",

    "https://huecker.io",

    "https://dockerhub.timeweb.cloud",

    "https://docker.rainbond.cc",

    "https://dockerhub.icu",

    "https://docker.chenby.cn",

    "https://docker.1panel.live",

    "https://docker.awsl9527.cn",

    "https://docker.anyhub.us.kg",

    "https://dhub.kubesre.xyz",

    "https://docker.1ms.run",

    "https://docker.xuanyuan.me"

  ]


Docker 容器内部如何访问本机的服务

要让Docker容器访问宿主机上的服务,可以使用特殊的网络地址host.docker.internal。这个地址在Docker 18.03及以上版本的Windows和Mac上可用。

在容器内部,使用host.docker.internal代替localhost或127.0.0.1。


本机如何访问docker内服务

要从本机访问Docker容器内的服务,您可以使用以下方法:

1.端口映射:使用 -p 参数将容器端口映射到本机端口。

例如,如果您有一个运行在容器内部端口80的Web服务,并且您想通过本机的端口8080访问它,您可以这样运行容器:

docker run -p 8080:80 your-image

然后您可以通过访问 http://localhost:8080 或者 http://127.0.0.1:8080 从本机访问该服务。


2.连接到Docker网络:如果您想要从本机访问容器,而不是通过端口映射,可以将您的容器连接到Docker默认网络。


首先,创建一个网络(如果还没有的话):

docker network create my-network

然后,运行您的容器并将其连接到该网络:

docker run --network=my-network --name=my-container your-image


现在,您可以通过容器名称来从任何其他连接到同一网络的容器或本机访问它。

例如,使用 docker exec 命令从本机ping容器:

docker exec my-container ping $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container)


或者,如果您的容器暴露了一个内部端口,您可以直接通过容器的内部IP地址来访问服务:

curl $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container):80

请根据您的具体需求和服务配置选择适当的方法。


典型命令例子

docker pull nginx:latest  下载镜像

docker images 显示下载的镜像

docker run -d -p 81:80 nginx  运行镜像  -d是后台运行 -p是映射端口  外部端口81 内部端口80

docker ps 显示正在运行的镜像

进入运行的镜像

docker exec -it 92[这个是运行的id]  bash

提示 

root@92[这个是运行的id]

退出镜像容器

exit

这时候按正常的usr目录之类的操作了

cd /usr/share/nginx/html/

cat index.html

修改index.html

echo hello >index.html

再次访问chrome ctrl+F5强制刷新

退出运行的镜像 exit

强制删除运行的镜像

docker rm -f 92[这个是运行的id]

当前镜像保存

docker commit 92[这个是运行的id] m1[保存为m1]


docker commit 命令用于从一个已经运行的容器中创建一个新的镜像。这个命令并不会将镜像保存到特定的位置,而是会保存在 Docker 的本地镜像库中。

如果你想要保存镜像到一个文件,你可以使用 docker save 命令。

例如,如果你想要保存一个名为 myimage:mytag 的镜像到一个名为 myimage.tar 的文件中,你可以使用以下命令:

docker save myimage:mytag -o myimage.tar

这将会创建一个名为 myimage.tar 的文件,里面包含了 myimage:mytag 镜像的所有层及相关的元数据。

要从这个文件加载镜像,你可以使用 docker load 命令:

docker load -i myimage.tar

这将会把 myimage.tar 文件中的镜像加载到本地的 Docker 镜像库中。

查帮助 docker commit  --help


提交自己的镜像

(以nginx镜像为例)

(这里提交的是到系统本地仓库)

docker pull nginx        #以nginx镜像为例 

docker run -itd --name mynginx nginx /bin/bash #创建一个名为mynginx的容器 

docker exec -it mynginx /bin/bash #进入容器,增加一些自己的内容,比如装一个vim等 

#注意:下面在mynginx:v1.0前面加的guianjun是对应到Docker Hub自己账号的公网仓库名一致,否则后面将无法推送到公网Docker Hub自己的仓库下面,如果只是推送到本地系统仓库,则可以不用加

docker commit -m "安装了vim" mynginx guianjun/mynginx:v1.0    #提交容器 

docker images          #查看镜像是否提交成功 

docker image history guianjun/mynginx:v1.0   #查看镜像提交记

1.png‘’

docker run -itd --name mynginx_test mynginx:v1.0    

 #进入容器发现已经装好vim

docker exec -it mynginx_test /bin/bash


上传自己制作的镜像到远程仓库

docker push --help

上传镜像到公网仓库

首先现在Docker Hub注册自己的账号

1.png

docker login

1.png

docker image push guianjun/mynginx:v1.0

1.png

1.png推送成功




dockerfile编写(想当于批处理) 文件内容如下

FROM nginx #基于nginx镜像构建新镜像

ADD ~/ /usr/share/nginx/html  #将当前文件copy到容器的指定html目录


运行dockerfile

docker build -t m2 .  #当前dockerfile构建一个镜像


可以运行新构建的m2

docker run -d -p 100:80 m2


将镜像保存为文件

docker save m2 > 1.tar  


删除镜像

docker rmi m2


加载tar文件

docker load <1.tar

这时候镜像m2再次出来

docker images 查看


运行还可以指定名字

docker run -d -p 999:80 --name mynginx  m2


文件映射

docker run -d -p 999:80  -v /usr/123 :/usr/share/nginx/html -v 'pwd' :/usr/123 m2



搜索docker的镜像

docker search  nginx 


复制文件

sudo docker cp /Users/front/Downloads/beifen.bak MSSQL_1433:/var/opt/mssql/backup


Top