Docker起步

关于Docker是什么可以看 阮一峰老师的这篇文章

Docker的基本操作

  • 启动容器
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
  # 开启一次性命令执行容器
  $ docker run IMAGE [COMMAND] [ARG..]
  # run 在新容器中执行命令
  # IMAGE 容器启动所使用的镜像
  # COMMAND 容器启动所使用的命令
  # ARG 容器启动使用命令的参数
  
  # e.g: 
  $ docker run ubuntu echo 'Hello World'
  
  # 开启交互式进程容器
  $ docker run --name container-name -i -t IMAGE /bin/bash
  # --name 自定义容器名字
  # -i --interactive=true|false 默认是false 告诉docker守护进程为容器始终打开标准输入
  # -t --tty=true|false 默认是false 告诉docker为创建的容器提供一个伪tty终端
  # /bin/bash 使用bash作为交互方式
  
  # e.g.
  $ docker run -i -t ubuntu /bin/bash
  • 查看容器
1
2
3
4
5
6
7
  # 查看容器情况
  $ docker ps [-a][-l]
  # -a 列出所有的容器
  # -l 列出最新创建的容器
  
  # 查看容器的详细信息
  $ docker inspect container-name/container-ID
  • 重新启动停止的容器
1
2
3
  # 启动一个已经停止的容器
  $ docker start -i container-name
  # -i 使用交互方式重启容器
  • 删除容器
1
  $ docker rm container-name

守护式容器

  • 什么是守护容器
    • 能长期运行
    • 没有交互式会话
    • 适合运行应用程序和服务
  • 如何以守护方式运行容器
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 方式一:
# 1.新建一个交互式容器
$ docker run -i -t IMAGE /bin/bash
# 2.使用 Ctrl+p Ctrl+q 离开容器
# 此时容器进程没有停止,处于守护状态
# 3.再次进入此容器
$ docker attach container-name/container-ID

# 方式二:
# 1.直接新建一个守护容器
$ docker run --name container-name -d IMAGE /bin/bash

# e.g.
$ docker run --name dc1 -d ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done"

查看运行容器容器日志和进程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看运行容器的日志
$ docker logs [-f][-t][--tail] container-name/container-ID
    -f --follows=true|false # 默认为false 一直跟着日志的变化并返回结果
    -t --timestamps=true|false # 默认为false 加入时间戳
    --tail="all" # 显示结尾处多少条的日志,默认全部

# e.g.
$ docker logs -ft --tail 10 dc1

# 查看运行日志的进程
$ docker top container-name/container-ID

在运行的容器内启动新进程

1
2
# 在运行容器内启动新进程的命令参数同启动新容器命令参数十分相似
$ docker exec [-d][-i][-t] container-name/container-ID [COMMAND][ARG...]

停止守护式容器

1
2
3
4
5
# 发送停止信号并等待容器停止,停止后返回容器的名字
$ docker stop container-name/container-ID 

# 直接终止容器
$ docker kill container-name/container-ID

设置容器的端口映射

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 设置容器的端口映射
$ docker run [-P][-p]
    -P, --publish-all=true|false # 默认为false 将为容器暴露所有端口进行映射
    -p, --publish=[] # 指定映射那些端口
    
# -p 具体格式如下:
# 只指定容器端口,会随机映射到宿主机的某个端口
# containerPort
$ docker run -p 80 -i -t ubuntu /bin/bash 
#
# 指定宿主机端口和容器端口,宿主机端口和容器端口映射一一对应
# hostPort:containerPort
$ docker run -p 8080:80 -i -t ubuntu /bin/bash 
#
# 指定ip和容器端口
# ip::containerPort
$ docker run -p 0.0.0.0:80 -i -t ubuntu /bin/bash
#
# 指定ip、宿主机端口和容器端口
# ip:hostPort:containerPort
$ docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash

在容器中部署静态网站 - Nginx部署流程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 1.创建映射80端口的交互式容器
$ docker run -p 80 --name web -i -t ubuntu /bin/bash
# 2.安装Nginx
$ (root) apt install nginx # 在名为web的容器中,执行Nginx安装命令
# 3.安装文本编辑器vim
$ (root) apt install vim
# 4.创建静态页面
#   在/var/www/html目录下创建并编辑简单的静态页面 index.html
# 5.修改Nginx配置文件
#   修改nginx配置文件中的根目录位置
#   e.g.    root /var/www/html;
# 6.运行Nginx
$ nginx
# 7.验证网站访问
$ docker ps # 查看运行的容器情况
# 可以看到PORTS下有类似 0.0.0.0:32770->80/tcp,说明容器80端口映射到宿主机的32770端口
$ curl 127.0.0.1:32770  # 可以访问到index.html页面
# 直接访问容器
$ docker inspect web  # 查看容器的详情
# 其中有一行 "IPAddress": "172.17.0.3", 表示容器的ip地址
$ curl 172.17.0.3 # 也可以访问网页

查看和删除镜像

什么是Docker Image 镜像

  1. 容器的基石
  2. 层叠的只读文件系统
  3. 联合加载(union mount) docker_image

列出镜像

1
2
3
4
5
$ docker images [OPTSIONS][REPOSITORY]
    -a, --all=false  # 显示所有镜像,默认不显示中间层镜像
    -f, --filter=[]  # 过滤条件
    --no-trunc=false # 指定不适用截断的形式显示镜像ID,默认截断
    -q, --quiet=false # 只显示镜像的唯一ID

镜像的仓库

  • REPOSITORY 仓库:指的是镜像的分类比如:Ubuntu仓库
  • REGISTRY 仓库:指的是镜像的存储服务

镜像标签

  • TAG 标签:仓库的版本号,比如:Ubuntu:16.04 安装镜像时,如果不使用tag,默认TAG是latest 同一个镜像可以有多个镜像标示,例如:Ubuntu:16.04和Ubuntu:latest,可能对应同一个镜像 REPOSITORY:TAG 组成了镜像的一个标示 IMAGE ID是一个镜像的唯一标示

镜像删除

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ docker rmi REPOSITORY[:TAG]  
# 如果一个镜像有多个REPOSITORY:TAG标示,镜像不会真正被删除

$ docker rmi IMAGE_ID
# IMAGE_ID是镜像唯一的标示,删除时使用的IMAGE_ID将会删除镜像,并且与之相关联的REPOSITORY:TAG都会被删除

$ docker rmi REPOSITORY1:TAG1 REPOSITORY2:TAG2
# 可以写多个标示,对多个镜像进行删除

$ docker rmi $(docker images -q ubuntu)
# 通过 docker images -q 命令过滤镜像,并只输出IMAGE_ID,作为 docker rmi 的参数进行镜像的批量删除

查找镜像

1
2
3
4
5
$ docker search [OPTIONS] TERM
    --automated=false # Only show automated builds
    --no-trunc=false # Don't truncate output
    -s, --stars=0   # Only displays with at least x stars
    # 最多返回25个结果

拉取镜像

1
2
$ docker pull [OPTIONS] NAME [:TAG]
    -a, --all-tags=false  Download all tagged images in the repository

推送镜像

Todo

Docker服务链接

Todo

Dockerfile

comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计