以一个实际需求为例:
使用docker下载nginx,将首页改为自己的页面,发布在docker应用市场

1.检索nginx

首先需要检索有没有该镜像

docker search nginx
  • 1.

我当前以普通用户身份运行 Docker 命令,/var/run/docker.sock 文件默认只允许 root 用户或者属于 docker 组的用户访问,因此需要额外的权限。所以以下都是在root权限下进行

结果如下:docker常见命令_bash

可以看到提示超时,因为大陆连接外网的问题,因此,需要对docker配置镜像地址。

注意:

即使配置代理后search还是超时,但pull又正常。

2.安装nginx

docker pull nginx
  • 1.

上述命令会默认安装最新版本的nginx,相当于

docker pull nginx:latest
  • 1.

如果要安装指定版本,冒号后面跟上版本名称即可,如:

docker pull nginx:stable-alpine3.20-perl
  • 1.

3.显示镜像

docker images
  • 1.

docker常见命令_bash_02

REPOSITORY对应镜像名,TAG对应版本,IMAGE ID对应其唯一ID

4.删除镜像

docker rmi ID/版本
  • 1.

比如删除上述创建的镜像

docker rmi 4e1b6bae1e48
# 或者
docker rmi nginx:latest
  • 1.
  • 2.
  • 3.

5.运行容器

docker run用于创建并启动一个新容器,可以理解为给自己的手机安装apk文件,安装好应用后自动启动

docker run nginx
  • 1.

上面的命令为启动最新版本的nginx,如果你的机器中没有nginx,会自动下载最新版本的nginx。docker常见命令_bash_03

此时nginx便被启动了,但此时当前控制台不能随便输入内容,防止中断进程。

想要在当前控制台继续输入内容,而不打断docker运行,需要后台运行docker run -d

而且可以看到生成的容器NAME是随机的,如果想要生成指定名称的容器可以使用docker run --name 容器名称

由于nginx是开放80端口,但docker运行开放的端口与容器内的端口不互通,所以需要通过docker run -p进行指定端口的映射。同时需要注意,docker一个端口是唯一的,多个容器的端口可以相同。

综上,改进后的创建并运行容器的命令如下:

docker run -d --name my_container -p 88:80 nginx 
  • 1.

使用后台运行创建一个名称为my_cotainer的nginx的容器。

docker常见命令_docker_04

可以看到就不会在当前控制台输出docker内容了。

同时通过docker ps查看容器状态docker常见命令_nginx_05

可以看到PORTS端口映射与NAMES名称修改均已成功。

访问本地88端口便能显示nginx首页docker常见命令_docker_06

docker -e表示给环境中添加环境变量。

6.查看正在运行的容器

打开新的控制台,输入

docker ps
  • 1.

表示查看所有运行中的容器docker常见命令_docker_07

可以看到此时nginx在运行

docker ps -a
  • 1.

查看所有容器,包括停止运行的容器。

7.停止运行的容器

使用停止与启动,可以通过前面docker ps确定的ID,如nginx对应的ID为2e82bca9ddde,对应命令

docker stop 2e8
  • 1.

可以输入全部ID,也可以输入一部分,关键能跟别的区分开即可。

或者通过NAMES来启动,如nginx对应的NAEMES为elastic_vaughan,对应命令就是:

docker stop elastic_vaughan
  • 1.
注:

不能这样写:

docker stop nginx
  • 1.

这样是找不到的,因为nginx是镜像名。

8.启动容器

docker start用于启动已经停止的容器,可以类比在手机桌面点击软件图标,进入app。
跟停止同理,仅举例NAMES方式启动。

docker start elastic_vaughan
  • 1.

9.重启容器

跟启动同理。在容器不管启动还是关闭状态,都可以运行此程序。

docker restart elastic_vaughan
  • 1.

10.查看容器状态

docker stats elastic_vaughan
  • 1.

docker常见命令_nginx_08

可以查看CPU,内存等的占用情况。

11.查看容器日志

docker logs elastic_vaughan
  • 1.

查看指定容器的日志。

12.进入容器修改

-it表示以交互模式,bash使用控制台方式

docker exec -it elastic_vaughan bash
  • 1.

docker内系统纯净,是没有vi或者vim的。

想进入容器修改nginx默认首页内容,可以先安装vim

apt-get update
apt-get install vim
  • 1.
  • 2.

通过查询官方文档,发现nginx默认的首页内容文件在: /usr/share/nginx/html/index.html

vim /usr/share/nginx/html/index.html
  • 1.

将h1修改为hello worlddocker常见命令_bash_09

完成后查看88端口页面,变成了自定义hello world。docker常见命令_bash_10

13.退出容器

exit
  • 1.

14.删除容器

docker rm elastic_vaughan
  • 1.

删除指定容器,但在删除前,需要先停止容器。

如果想要删除运行中的容器,就通过强制删除。

docker rm -f elastic_vaughan
  • 1.

15.提交镜像

将本地创建的容器my_container打包成一个镜像——mynginx:V1.0

docker commit my_container mynginx:V1.0
  • 1.

docker常见命令_nginx_11

打包成功如上显示。查看镜像,发现已经有自定义镜像。docker常见命令_bash_12

16.保存镜像成文件

将mynginx:V1.0镜像保存为mynginx.tar压缩文件

docker save -o mynginx.tar mynginx:V1.0
  • 1.

docker常见命令_nginx_13

17.加载镜像文件

将打包成压缩包的镜像进行加载,会自动安装好该镜像。

docker load -i mynginx.tar
  • 1.

在未安装docker环境的机器里也能看到安装好镜像。docker常见命令_nginx_14

想要像之前一样安装镜像,docker run -d --name my_container -p 88:80 mynginx:V1.0docker常见命令_bash_15

便能看到容器在运行了。

发布到docker社区

由于大陆防火墙问题,可能下面这些命令对于大陆用户是无效的。

18.登录

docker login
  • 1.

docker常见命令_docker_16

19.命名

docker tag myimage:1.0 myrepo/myimage:latest
  • 1.

这会将本地 myimage:1.0 镜像标记为 myrepo/myimage:latest。

20.推送到仓库

docker push myrepo/myimage:1.0
  • 1.

这会将本地的 myrepo/myimage:latest 镜像推送到 Docker Hub。