【Docker】常用命令汇总

Docker 是1个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

目录

[一. 架构](#一. 架构)

[1. 镜像](#1. 镜像)

[2. 容器](#2. 容器)

[3. 仓库](#3. 仓库)

二.使用

[1. 镜像使用](#1. 镜像使用)

[1.1 查看镜像](#1.1 查看镜像)

[1.2 创建镜像](#1.2 创建镜像)

[1.3 查找镜像](#1.3 查找镜像)

[1.4 删除镜像](#1.4 删除镜像)

[1.5 创建镜像](#1.5 创建镜像)

[1.6 设置镜像标签](#1.6 设置镜像标签)

[2. 容器使用](#2. 容器使用)

[2.1 启动容器](#2.1 启动容器)

[2.2 进入容器](#2.2 进入容器)

[2.3 导出/入容器](#2.3 导出/入容器)


一. 架构

Docker 包括3个基本概念:镜像,容器,仓库。

1. 镜像

Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

2. 容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

3. 仓库

仓库(Repository)可看成一个代码控制中心,用来保存镜像。

二.使用

1. 镜像使用

1.1 查看镜像

•docker images:来列出本地主机上的镜像。

复制代码
root@lly:~$ docker images           
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB

各个选项说明:

|------------|-------------------------|
| REPOSITORY | **REPOSITORY:**表示镜像的仓库源 |
| | **TAG:**镜像的标签 |
| | **IMAGE ID:**镜像ID |
| | **CREATED:**镜像创建时间 |
| | **SIZE:**镜像大小 |

1.2 创建镜像

在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果想预先下载这个镜像,可以使用 docker pull 命令来下载它。

复制代码
root@lly:~$ docker pull ubuntu:13.10
13.10: Pulling from library/ubuntu
6599cadaf950: Pull complete 
23eda618d451: Pull complete 
f0be3084efe9: Pull complete 
52de432f084b: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3
Status: Downloaded newer image for ubuntu:13.10

1.3 查找镜像

复制代码
#使用 docker search 命令来搜索指定镜像(httpd)
root@lly:~$  docker search httpd

1.4 删除镜像

复制代码
#使用 docker rmi 命令,比如删除 hello-world 镜像
$ docker rmi hello-world

1.5 创建镜像

当从 docker 镜像仓库中下载的镜像不能满足我们的需求时,可以通过以下2种方式对镜像进行更改。

•从已经创建的容器中更新镜像,并且提交这个镜像

复制代码
#更新镜像之前,需要使用镜像来创建1个容器
docker run -t -i ubuntu:15.10 /bin/bash
#进入容器后,更新系统
apt-get update
apt-get upgrade -y
#在完成操作之后,输入 exit 命令退出这个容器
exit
#此时 ID 为 e228edb10165 的容器,是按需求更改的容器。可以通过命令 docker commit 来提交容器副本
docker commit -m="has update" -a="lly" e228edb1016 lly/ubuntu:v2
#可以使用 docker images 命令来查看我们的新镜像 lly/ubuntu:v2
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
lly/ubuntu       v2                  70bf1840fd7c        15 seconds ago      158.5 MB
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB

•使用 Dockerfile 指令来创建1个新的镜像

使用命令 docker build , 从零开始来创建1个新的镜像。需要创建1个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

复制代码
root@lly:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "[email protected]"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

docker build -t runoob/centos:6.7 .

参数说明:

|--------|----------------------------------------|
| -t | 指定要创建的目标镜像名 |
| . | Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径 |

1.6 设置镜像标签

复制代码
docker tag 860c279d2fec lly/centos:dev

镜像ID:860c279d2fec ;

镜像源名:lly/centos;

标签名:dev。

2. 容器使用

2.1 启动容器

复制代码
docker run -it ubuntu /bin/bash

参数说明:

|-----------|--------------------------------------------|
| -i | 交互式操作 |
| -t | 终端 |
| ubuntu | ubuntu 镜像 |
| /bin/bash | 放在镜像名后的是命令,这里希望有个交互式 Shell,因此用的是 /bin/bash |

•后台运行

在大部分的场景下,希望 docker 的服务是在后台运行的,可以过 -d 指定容器的运行模式。

复制代码
docker run -itd --name ubuntu-test ubuntu /bin/bash

•启动已停止运行的容器

复制代码
#查看所有的容器
$ docker ps -a
复制代码
#docker start 启动1个已停止的容器
$ docker start b750bbbcfd88 

•停止容器

复制代码
#停止容器
docker stop <容器 ID>
#重启容器
docker restart <容器 ID>

•删除容器

复制代码
docker rm -f 1e560fca3906

2.2 进入容器

•exec

复制代码
docker exec -it 243c32535da7 /bin/bash

从这个容器退出,容器不会停止。

•attach

复制代码
docker attach 1e560fca3906 

如果从这个容器退出,会导致容器的停止。

2.3 导出/入容器

(1)导出本地某个容器,可以使用 docker export 命令。

复制代码
#导出容器 1e560fca3906 快照到本地文件 ubuntu.tar
docker export 1e560fca3906 > ubuntu.tar

(2)使用 docker import 从容器快照文件中再导入为镜像。

复制代码
#将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1
cat docker/ubuntu.tar | docker import - test/ubuntu:v1

2.4 端口映射

通过 -p 参数设置端口。

复制代码
#将容器内部的 80 端口映射到本地主机的 8888 端口上
docker run -d -p 8888:80  nginx:latest
相关推荐
EricFRQ2 小时前
devops自动化容器化部署
运维·自动化·devops
白云~️3 小时前
uniappx 打包配置32位64位x86安装包
运维·服务器·github
在河之洲木水3 小时前
现代多核调度器的本质 调度三重奏
linux·服务器·系统架构
文牧之4 小时前
PostgreSQL的扩展 pgcrypto
运维·数据库·postgresql
程序员JerrySUN4 小时前
驱动开发硬核特训 · Day 22(下篇): # 深入理解 Power-domain 框架:概念、功能与完整代码剖析
linux·开发语言·驱动开发·嵌入式硬件
白总Server4 小时前
多智能体系统的中间件架构
linux·运维·服务器·中间件·ribbon·架构·github
未来会更好yes4 小时前
Centos 7.6安装redis-6.2.6
linux·redis·centos
二猛子4 小时前
Linux(Centos版本)中安装Docker
linux·docker·centos
浪裡遊5 小时前
跨域问题(Cross-Origin Problem)
linux·前端·vue.js·后端·https·sprint
Johny_Zhao6 小时前
OpenStack 全套搭建部署指南(基于 Kolla-Ansible)
linux·python·信息安全·云计算·openstack·shell·yum源·系统运维