logo头像
Snippet 博客主题

Docker基础使用

概要

Docker由下面3个东西组成:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

安装

参考:CentOS Docker 安装 | 菜鸟教程 (runoob.com)

我的测试环境是CentOS7,使用的官方安装脚本自动安装。

1
curl -sSL https://get.daocloud.io/docker | sh

安装完成后,重启docker服务。

1
2
3
4
5
6
docker version   # 查看版本
systemctl status docker # 查看docker状态
systemctl start docker # 启动docker
systemctl restart docker # 重启docker

# 或者使用service docker start

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
docker     # 查看docker所有命令
docker xxx --help # 查看xxx命令详情

docker search 镜像名 # 从远程仓库搜索镜像
docker pull 镜像名 # 从远程仓库拉镜像到本地
docker image list/docker images # 查看已有镜像列表
docker tag 镜像ID 新镜像名[:新tag名] # 镜像改名/改tag名
docker rmi [-f] 镜像ID # 删除镜像(要先删除镜像引起的容器)
docker image prune # 删除没有使用的镜像
docker rmi $(docker images -q) # 删除所有镜像

# 创建容器 docker run [-it -d -p -name -v] 常用可选参数
docker run -it 镜像名 [shell命令] # 前台运行创建新容器
docker run --rm -it 镜像名 /bin/sh # 前台运行容器,退出后删除
exit # 退出容器
docker run -d 镜像名 [shell命令] # 后台运行创建新容器
docker run -d -p 5000:5000 镜像名 命令 # 将容器内5000端口映射到宿主机的5000端口,多个就依次加-p xx:xx就行了。默认是绑定tcp端口,如果udp直接加后面就行了:-p 5000:5000/udp。这个设置是直接改容器的本地配置(inspect),永久生效,后面直接docker start就行了。
docker run -v 宿主机目录:容器目录 镜像名 命令 # -v将宿主机目录挂载到容器某个目录下,这样宿主机就可以与容器共享目录了。

docker ps # 查看正在运行的容器
docker ps -a #查看所有的容器
docker losgs [-f] 容器ID # 查看运行的容器内标准输出日志, -f类似tail -f一样
docker stop 容器ID # 停止容器
docker start 容器ID # 启动一个已经停止的容器
docker restart 容器ID # 重启容器
docker rm [-f] 容器ID # 删除容器
docker container prune # 删除所有处于终止状态的容器
docker rm $(docker ps -aq) # 删除所有容器

docker attach 容器ID #进入一个启动的后台容器,这种方式进入exit退出会导致容器也会退出
docker exec -it 容器ID /bin/bash #同上,这种方式进入exit退出,容器不会退出,推荐这种

docker export 容器ID > xxx.tar # 导出容器
docker import xxx.tar 镜像名 # 把xxx.tar(也可以是URL)以镜像形式导入

docker cp 宿主机文件路径 容器ID:容器目标路径 # 宿主机文件传到容器
docker cp 容器ID:容器文件路径 宿主机目标路径 # 容器文件传到宿主机

docker builder prune #清理构建缓存(build会产生很多缓存占用磁盘,磁盘不足了可以清理下)
docker build -t 镜像名 . -f Dockerfile # 从dockerfile构建镜像
docker-compose build [servername] # 重新构建所有或[servername]镜像
docker-compose up [-d] # 启动所有容器[后台]


通过容器提交镜像以及推送镜像流程

我们本地一个容器如果想要提交到docker仓库供别人pull下载使用。操作流程如下(和git使用类似):

  1. 注册docker仓库账号

    地址: Docker Hub

  2. 本地提交容器为镜像

1
docker commit -m "描述日志" -a "作者" 容器ID 新镜像名
  1. 登录docker hub
1
docker login
  1. 推送到远程仓库
1
docker push 镜像名[:tag名]
  1. 别人使用
1
docker pull 镜像名[:tag名]