原创

Docker的常用命令

1 Docker简介

Docker是开源应用容器引擎,轻量级容器技术。
基于Go语言,并遵循Apache2.0协议开源
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux系统上,也可以实现虚拟化
容器完全使用沙箱技术,相互之间不会有任何接口
类似于虚拟机技术(vmware、vitural),但docker直接运行在操作系统(Linux)上,而不是运行在虚拟机中,速度快,性能开销极低
白话文,简介就是:
Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。
运行中的这个镜像称为容器,容器启动是非常快速的。类似windows里面的ghost操 作系统,安装好后什么都有了。

2 Docker核心概念

docker镜像(Images):Docker镜像是用于创建Docker容器的模板
docker容器(Container):镜像启动后的一个实例称为容器,容器是独立运行的一个或一组应用,
docker客户端(Client):客户端通过命令行或其他工具使用Docker Api 与Docker的守护进程进行通信
docker主机(Host):一个物理或虚拟的机器用来执行Docker守护进程和容器
docker仓库(Registry):Docker仓库用来存储镜像,可以理解为代码控制中的代码仓库,
Docker Hub 提供了庞大的镜像集合供使用

3 Docker的常用命令

3.1 docker镜像命令

通常情况下,Docker的镜像都放在Docker的官网 Docker Hub上。
我们可以进入官网,搜索镜像后,选择合适的版本,进行下载,官网直接给了命令,很方便。如下图,可以参考: docker拉取镜像查看版本

file

镜像检索

docker search 镜像名称
除了可以在Docker Hub上搜索镜像外,还可以通过该命令进行搜索,下面以 mysql 为例:

docker search mysql

以下是我们搜索到的大致内容

[root@instance-ubphse5x /]# docker search mysql
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                             MySQL is a widely used, open-source relati...   8711      [OK]
docker.io   docker.io/mariadb                           MariaDB is a community-developed fork of M...   3045      [OK]
docker.io   docker.io/mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   644                  [OK]
//此处省略好几行...

主要列介绍:
name列 docker.io/mysql 其中mysql 其中指的是镜像名称
STARS 8711 stars 数
OFFICIAL [OK] 是 官方 否非官方

镜像下载

docker pull 镜像名:tag
其中tag多为系统的版本,可选的,默认为least。

//以下命令是各个版本的举例
docker pull mysql   //等同于  docker pull mysql:latest
docker pull mysql:8.0   //下载8.0版本
docker pull mysql:5.7.28  
docker pull mysql:5.7
镜像列表

docker images
获取已下载镜像列表

[root@instance-ubphse5x /]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx         latest              5a9061639d0a        5 days ago          126 MB
docker.io/hello-world   latest              fce289e99eb9        9 months ago        1.84 kB

RESPOSITORY为镜像名
TAG为镜像版本,least代表最新版
IMAGE ID为该镜像唯一ID
CREATED为该镜像创建时间
SIZE为该镜像大小

镜像删除

docker rmi [IMAGE ID]
删除指定镜像,IMAGE ID指的是上面查询到的:

docker rmi IMAGE ID

删除所有镜像:

docker rmi $(docker images -q)

3.2 容器操作

我们将镜像下载下来后,就可以启动它了。

根据镜像启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker run --name container-name -d image-name

-- name:为容器起一个名称
-d:detached,执行完这句命令后,控制台将不会阻塞,可以继续输入命令操作
image-name:要运行的镜像名称
-p :将容器的端口映射到主机的端口
-v:将主机中目录挂载到容器目录。就是表示目录映射关系。这样做的好处就是宿主机上修改文件,可以直接共享到容器里面
-it:该命令是-i(以交互模式运行容器,并将容器的标准输入打开,这样理解,表示创建容器后立马运行) 和 -t(为容器重新分配一个伪输入终端,这样理解,表示容器启动后会进入其命令行) 组合后表示,容器创建就能登陆进去,即分配一个伪终端
--rm:停止容器后立马删除容器
/bin/bash:以交互式的形式运行容器 这个暂时没有搞懂,不知道怎么用,试了半天也没搞定,,,,,这种方式运行容器,当退出的时候容器也就停止了
如下命令:

docker run -d -p 80:80 --name nginx -v /nginx/html:/usr/share/nginx/html -v /nginx/conf:/etc/nginx -v /nginx/logs:/var/log/nginx nginx

-p 80:80:将容器的80端口映射到主机的80端口
--name nginx:将容器命名为nginx
-v /nginx/html:/usr/share/nginx/html:将主机中/nginx/html目录挂载到容器的/usr/share/nginx/html目录
-v /nginx/conf:/etc/nginx:将主机中/nginx/conf目录挂载到容器的/etc/nginx目录
-v /nginx/logs:/var/log/nginx:将主机中/nginx/logs目录挂载到容器的/var/log/nginx目录
说明这里挂在的目的是我们配置nginx的时候不用进入容器,直接可以在物理机上进行操作,方便!

查看容器
//查看所有容器(运行中和未运行)
docker ps -a

//查看正在运行的容器
docker ps

//查看停止的容器
docker ps -f status=exited

// 查看最后一次运行的容器
docker ps -l
停止容器

docker stop 容器名称(或者容器ID)

启动容器

docker start 容器名称(或者容器ID)
docker容器已经存在了,我们需要修改启动命令可以 :参考文章

文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或者时目录 容器名称:容器目录

也可以将文件从容器中拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录
删除容器

删除单个容器:

docker rm 容器名称(或者容器ID

删除所有容器:

docker rm $(docker ps -a -q )
查看容器的所有信息

会打印出一个此容器的配置信息

docker inspect 容器名称(或者容器ID
查看容器日志

查看当前容器日志,可通过如下命令:

docker logs 容器名称(或者是容器ID
查看端口映射

可以通过如下命令查看容器映射了哪些端口及协议:

docker port 容器名称(或者是容器ID
登陆守护式容器(后台运行的容器)

通过该命令可以操作容器内部的文件什么的。

docker exec -it 容器名称(或容器ID /bin/bash

边测试边写文章,整整写了一下午。。。。。中间有草草了之的想法,还好,坚持下来了。

正文到此结束(点击广告是对作者最大的支持)