以一个实际需求为例:
使用docker下载nginx,将首页改为自己的页面,发布在docker应用市场
1.检索nginx
首先需要检索有没有该镜像
我当前以普通用户身份运行 Docker 命令,/var/run/docker.sock 文件默认只允许 root 用户或者属于 docker 组的用户访问,因此需要额外的权限。所以以下都是在root权限下进行
结果如下:
可以看到提示超时,因为大陆连接外网的问题,因此,需要对docker配置镜像地址。
注意:
即使配置代理后search还是超时,但pull又正常。
2.安装nginx
上述命令会默认安装最新版本的nginx,相当于
如果要安装指定版本,冒号后面跟上版本名称即可,如:
3.显示镜像
REPOSITORY对应镜像名,TAG对应版本,IMAGE ID对应其唯一ID
4.删除镜像
比如删除上述创建的镜像
5.运行容器
docker run用于创建并启动一个新容器,可以理解为给自己的手机安装apk文件,安装好应用后自动启动
上面的命令为启动最新版本的nginx,如果你的机器中没有nginx,会自动下载最新版本的nginx。
此时nginx便被启动了,但此时当前控制台不能随便输入内容,防止中断进程。
想要在当前控制台继续输入内容,而不打断docker运行,需要后台运行docker run -d
。
而且可以看到生成的容器NAME是随机的,如果想要生成指定名称的容器可以使用docker run --name 容器名称
由于nginx是开放80端口,但docker运行开放的端口与容器内的端口不互通,所以需要通过docker run -p
进行指定端口的映射。同时需要注意,docker一个端口是唯一的,多个容器的端口可以相同。
综上,改进后的创建并运行容器的命令如下:
使用后台运行创建一个名称为my_cotainer的nginx的容器。
可以看到就不会在当前控制台输出docker内容了。
同时通过docker ps
查看容器状态
可以看到PORTS端口映射与NAMES名称修改均已成功。
访问本地88端口便能显示nginx首页
docker -e
表示给环境中添加环境变量。
6.查看正在运行的容器
打开新的控制台,输入
表示查看所有运行中的容器
可以看到此时nginx在运行
查看所有容器,包括停止运行的容器。
7.停止运行的容器
使用停止与启动,可以通过前面docker ps确定的ID,如nginx对应的ID为2e82bca9ddde
,对应命令
可以输入全部ID,也可以输入一部分,关键能跟别的区分开即可。
或者通过NAMES来启动,如nginx对应的NAEMES为elastic_vaughan
,对应命令就是:
注:
不能这样写:
这样是找不到的,因为nginx是镜像名。
8.启动容器
docker start用于启动已经停止的容器,可以类比在手机桌面点击软件图标,进入app。
跟停止同理,仅举例NAMES方式启动。
9.重启容器
跟启动同理。在容器不管启动还是关闭状态,都可以运行此程序。
10.查看容器状态
可以查看CPU,内存等的占用情况。
11.查看容器日志
查看指定容器的日志。
12.进入容器修改
-it表示以交互模式,bash使用控制台方式
docker内系统纯净,是没有vi或者vim的。
想进入容器修改nginx默认首页内容,可以先安装vim
通过查询官方文档,发现nginx默认的首页内容文件在: /usr/share/nginx/html/index.html
。
将h1修改为hello world
完成后查看88端口页面,变成了自定义hello world。
13.退出容器
14.删除容器
删除指定容器,但在删除前,需要先停止容器。
如果想要删除运行中的容器,就通过强制删除。
15.提交镜像
将本地创建的容器my_container打包成一个镜像——mynginx:V1.0
打包成功如上显示。查看镜像,发现已经有自定义镜像。
16.保存镜像成文件
将mynginx:V1.0镜像保存为mynginx.tar压缩文件
17.加载镜像文件
将打包成压缩包的镜像进行加载,会自动安装好该镜像。
在未安装docker环境的机器里也能看到安装好镜像。
想要像之前一样安装镜像,docker run -d --name my_container -p 88:80 mynginx:V1.0
便能看到容器在运行了。
发布到docker社区
由于大陆防火墙问题,可能下面这些命令对于大陆用户是无效的。
18.登录
19.命名
这会将本地 myimage:1.0 镜像标记为 myrepo/myimage:latest。
20.推送到仓库
这会将本地的 myrepo/myimage:latest 镜像推送到 Docker Hub。