以一个实际需求为例:
使用docker下载nginx,将首页改为自己的页面,发布在docker应用市场
1.检索nginx
首先需要检索有没有该镜像
登录后复制
bash
docker search nginx
我当前以普通用户身份运行 Docker 命令,/var/run/docker.sock 文件默认只允许 root 用户或者属于 docker 组的用户访问,因此需要额外的权限。所以以下都是在root权限下进行
结果如下:
可以看到提示超时,因为大陆连接外网的问题,因此,需要对docker配置镜像地址。
注意:
即使配置代理后search还是超时,但pull又正常。
2.安装nginx
登录后复制
bash
docker pull nginx
上述命令会默认安装最新版本的nginx,相当于
登录后复制
bash
docker pull nginx:latest
如果要安装指定版本,冒号后面跟上版本名称即可,如:
登录后复制
bash
docker pull nginx:stable-alpine3.20-perl
3.显示镜像
登录后复制
bash
docker images

REPOSITORY对应镜像名,TAG对应版本,IMAGE ID对应其唯一ID
4.删除镜像
登录后复制
bash
docker rmi ID/版本
比如删除上述创建的镜像
登录后复制
bash
docker rmi 4e1b6bae1e48
# 或者
docker rmi nginx:latest
5.运行容器
docker run用于创建并启动一个新容器,可以理解为给自己的手机安装apk文件,安装好应用后自动启动
登录后复制
bash
docker run nginx
上面的命令为启动最新版本的nginx,如果你的机器中没有nginx,会自动下载最新版本的nginx。
此时nginx便被启动了,但此时当前控制台不能随便输入内容,防止中断进程。
想要在当前控制台继续输入内容,而不打断docker运行,需要后台运行docker run -d
。
而且可以看到生成的容器NAME是随机的,如果想要生成指定名称的容器可以使用docker run --name 容器名称
由于nginx是开放80端口,但docker运行开放的端口与容器内的端口不互通,所以需要通过docker run -p
进行指定端口的映射。同时需要注意,docker一个端口是唯一的,多个容器的端口可以相同。
综上,改进后的创建并运行容器的命令如下:
登录后复制
bash
docker run -d --name my_container -p 88:80 nginx
使用后台运行创建一个名称为my_cotainer的nginx的容器。

可以看到就不会在当前控制台输出docker内容了。
同时通过docker ps
查看容器状态
可以看到PORTS端口映射与NAMES名称修改均已成功。
访问本地88端口便能显示nginx首页
docker -e
表示给环境中添加环境变量。
6.查看正在运行的容器
打开新的控制台,输入
登录后复制
bash
docker ps
表示查看所有运行中的容器
可以看到此时nginx在运行
登录后复制
bash
docker ps -a
查看所有容器,包括停止运行的容器。
7.停止运行的容器
使用停止与启动,可以通过前面docker ps确定的ID,如nginx对应的ID为2e82bca9ddde
,对应命令
登录后复制
bash
docker stop 2e8
可以输入全部ID,也可以输入一部分,关键能跟别的区分开即可。
或者通过NAMES来启动,如nginx对应的NAEMES为elastic_vaughan
,对应命令就是:
登录后复制
bash
docker stop elastic_vaughan
注:
不能这样写:
登录后复制
bash
docker stop nginx
这样是找不到的,因为nginx是镜像名。
8.启动容器
docker start用于启动已经停止的容器,可以类比在手机桌面点击软件图标,进入app。
跟停止同理,仅举例NAMES方式启动。
登录后复制
bash
docker start elastic_vaughan
9.重启容器
跟启动同理。在容器不管启动还是关闭状态,都可以运行此程序。
登录后复制
bash
docker restart elastic_vaughan
10.查看容器状态
登录后复制
bash
docker stats elastic_vaughan

可以查看CPU,内存等的占用情况。
11.查看容器日志
登录后复制
bash
docker logs elastic_vaughan
查看指定容器的日志。
12.进入容器修改
-it表示以交互模式,bash使用控制台方式
登录后复制
html
docker exec -it elastic_vaughan bash
docker内系统纯净,是没有vi或者vim的。
想进入容器修改nginx默认首页内容,可以先安装vim
登录后复制
bash
apt-get update
apt-get install vim
通过查询官方文档,发现nginx默认的首页内容文件在: /usr/share/nginx/html/index.html
。
登录后复制
bash
vim /usr/share/nginx/html/index.html
将h1修改为hello world
完成后查看88端口页面,变成了自定义hello world。
13.退出容器
登录后复制
bash
exit
14.删除容器
登录后复制
html
docker rm elastic_vaughan
删除指定容器,但在删除前,需要先停止容器。
如果想要删除运行中的容器,就通过强制删除。
登录后复制
bash
docker rm -f elastic_vaughan
15.提交镜像
将本地创建的容器my_container打包成一个镜像------mynginx:V1.0
登录后复制
bash
docker commit my_container mynginx:V1.0

打包成功如上显示。查看镜像,发现已经有自定义镜像。
16.保存镜像成文件
将mynginx:V1.0镜像保存为mynginx.tar压缩文件
登录后复制
bash
docker save -o mynginx.tar mynginx:V1.0

17.加载镜像文件
将打包成压缩包的镜像进行加载,会自动安装好该镜像。
登录后复制
bash
docker load -i mynginx.tar
在未安装docker环境的机器里也能看到安装好镜像。
想要像之前一样安装镜像,docker run -d --name my_container -p 88:80 mynginx:V1.0
便能看到容器在运行了。
发布到docker社区
由于大陆防火墙问题,可能下面这些命令对于大陆用户是无效的。
18.登录
登录后复制
bash
docker login

19.命名
登录后复制
bash
docker tag myimage:1.0 myrepo/myimage:latest
这会将本地 myimage:1.0 镜像标记为 myrepo/myimage:latest。
20.推送到仓库
登录后复制
bash
docker push myrepo/myimage:1.0
这会将本地的 myrepo/myimage:latest 镜像推送到 Docker Hub。