前言
我有幸很久之前的工作是负责云计算方面的,因此我在很早的时候就使用上了Docker,也知道 Docker 的部分原理。经过这些年的发展,特别是云原生方面,Docker被广泛地使用。在2015年写过一遍Docker的使用文章,但说得不全也不好,今天来重新写一份,本文是第一部分,旨在说明 docker 命令的基本使用,希望对大家能有帮助。
说明
本文并没有讲解 docker 的原理和主要概念,网上有很多资料对这方面进行了讲解,请自行查阅。本文列举了一堆可能常用的命令示例,作为参考,相关使用者能一目了然。
安装
$ brew install docker docker-compose docker-buildx docker-completion
使用
基础
# 查看版本号
$ docker --version
# 查看状态
$ docker stats
镜像
# 获取镜像
$ docker pull hello-world
# 查看镜像
$ docker images
# 查找镜像
$ docker search nginx
# 删除镜像
$ docker rmi hell-world
# 创建镜像:hwsdien/hello-world:v1
# -m: 描述信息
# -a: 作者
# 9d8bb5b878f6: 容器ID
# hwsdien/hello-world:v1: 创建的镜像名
$ docker commit -m="new version" -a="hwsdien" 9d8bb5b878f6 hwsdien/hello-world:v1
# 增加tag
$ docker tag 9d8bb5b878f6 hwsdien/hello-world:dev
# 构建镜像
# 1、编写 Dockerfile 文件
$ cat ./Dockerfile
FROM ubuntu
MAINTAINER Hwsdien "[email protected]"
RUN echo '123123' | md5sum
# 2、执行 docker build
$ docker build -t hwsdien/ubuntu:v1 .
容器
# 启动容器(可在终端交互)
# -t: 终端
# -i: 交互操作
# ubuntu: 镜像
# /bin/bash: 命令
$ docker run -ti ubuntu /bin/bash
# 启动容器(后台)
$ docker run -tid ubuntu /bin/bash
# 指定名称
$ docker run -tid --name hwsdien-linux ubuntu /bin/bash
# 启动设置端口映射
# 1、随机端口映射
$ docker run -tid -P nginx
# 2、指定端口映射
# 8088: 宿主机端口
# 80: docker内端口
$ docker run -tid -p 8088:80 nginx
# 查看端口映射情况
# 42e061e17b77: 容器ID
$ docker port 42e061e17b77
# 启动指定共享目录
# /tmp: 宿主机目录
# /data: 容器内目录
$ docker run -ti -v /tmp:/data ubuntu /bin/bash
# 启动指定网络
$ docker run -ti --network test-bridge-v1 ubuntu /bin/bash
# 启动指定DNS
$ docker run -ti --dns=8.8.8.8 ubuntu /bin/bash
# 停止容器
# 42e061e17b77: 容器ID
$ docker stop 42e061e17b77
# 启动已停止的容器
# 42e061e17b77: 容器ID
$ docker start 42e061e17b77
# 重启容器
# 42e061e17b77: 容器ID
$ docker restart 42e061e17b77
# 删除容器
$ docker rm -f 42e061e17b77
# 查看所有容器
$ docker ps -a
# 查看正在运行的容器
$ docker ps
# 查看容器的详细信息
$ docker inspect 42e061e17b77
# 进入容器
# 42e061e17b77: 容器ID
$ docker attach 42e061e17b77
# 在已运行的容器内执行命令
# 42e061e17b77: 容器ID
# date: 执行的命令
$ docker exec -it 42e061e17b77 date
# 将宿主机的数据复制到容器
# ./dist: 宿主机目录
# 42e061e17b77: 容器ID
# /www: 容器内目录
$ docker cp ./dist 42e061e17b77:/www
# 查看容器内的stdout
$ docker logs -f 42e061e17b77
# 查看容器内的进程情况
$ docker top 42e061e17b77
# 导出容器
$ docker export 42e061e17b77 > hwsdien-ubuntu.tar
# 导入容器
$ cat hwsdien-ubuntu.tar | docker import - hwsdien/ubuntu:v2
网络
# 新建网络
$ docker network create -d bridge test-bridge-v1
# 查看所有的网络
$ docker network ls
# 删除网络
$ docker network rm test-bridge-v1