docker入门干货(合适0基础)

docker常用命令汇总

下面介绍下docker入门级别的命令,同时也是比较常用的、基础的docker操作,需要声明一下,本文介绍的所有有关docker的操作均在centos7下完成。本文根据使用docker的流程分为服务安装、镜像操作、容器使用、垃圾回收分为四大类,对命令参数没有严格的区分,在以后的专题中会详细说明,本文主要用于入门

  • docker服务安装
  • docker镜像操作
  • docker容器使用

docker服务操作

在centos下安装docker非常容易,只需要配置好安装源即可,本文假设源一配置好,常用的做操命令如下:

  • 安装服务 yum install -y docker
  • 启动服务 service docker start 或者 systemctl start docker
  • 查看版本 docker version
  • 查看信息 docker info
  • 关闭服务 service docker stop 或者 systemctl stop docker
  • 重启服务 service docker restart 或者 systemctl restart docker
  • 设置为开机启动 service docker enable 或者 systemctl enable docker

需要如果配置docker安装源,可使用如下命令配置
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo


docker镜像操作

  • 加载镜像文件 docker load

例子: 加载镜像文件
docker load -i xxx.tar
-i 或者 --input 后跟镜像文件包,xxx.tar通常是通过docker save 保存到本地的镜像包,更多参数介绍请参考docker load --help

  • 登陆docker注册服务器 docker login

例子:登陆注册服务器
docker login docker-hub -u:admin -p:password
用账户名和密码登录到docker-hub

  • 拉取镜像 docker pull

例子:拉取镜像mysql
docker pull mysql:5.7.17
如果未指定镜像的源,默认会从docker.io拉取镜像,也可以指定注册源,假定我们已经存在注册源docker-hub,在该注册源/database下存在mysql:5.7.17,则可以在命令行指定源:
docker pull docker-hub/database/mysql:5.7.17

  • 构建镜像docker build

例子:在当前目录下构建镜像mysql:v1
docker build -t mysql:v1 .
-t 后添加镜像名和tag名,格式imageName:tag,例子中的镜像构建方式是最常用的

  • 为镜像打标签 docker tag

为镜像打标签最常用的使用场景:

  1. 在镜像推送到注册服务器上时,最为常用。我们需要将本地的镜像推送到远程的注册服务器上时,我们需要修改镜像的名字,再推送到服务器上,例如:
    docker tag tomcat:v1 docker-hub/tomcat:v1
    docker push docker-hub/tomcat:v1
    2.镜像更名,有的时候为了给镜像归类,需要将原来的镜像放到另一个路径下,则需tag一个新的名字,再删除原来的镜像,例如:
    docker tag tomcat:v1 docker-hub/common/tomcat:v1
    docker rmi tomcat:v1
  • 推送镜像 docker push

存在这样的可能,我们可能会对某个镜像做些小的修改,以适应我们的工作需要。比如,我们需要在某个镜像中需要默认安装好java开发环境、mysql数据库、tomcat服务器,然后供整合团队都使用这个已经修改好的镜像,这样有一个好处,不需要每个人再去花时间修改、测试、验证镜像了。我们不妨给这个镜像取名为:web-container:v1,我们做这个镜像只是为了公司内部使用,因此我们只需要推送到我们公司内部的源上。需要换个带有注册源的名字
例子:
docker tag web-container:v1 docker-hub/common/web-container:v1
docker push docker-hub/common/web-container:v1

  • 保存镜像 docker save

保存镜像为文件(有两种方式,一种是将镜像保存为文件,一种是将容器导出为文件,后面会简要说明docker export),可以将一个或者多个镜像文件导出为文件,常用格式:
docker save image:tag -o image-tag.tar,
-o 后指定文件名,通常为镜像名和tag名的链接字符,例子:
docker save mysql:5.7.17 -o mysql-5_7_17.tar

  • 删除镜像 docker rmi

删除镜像可以通过指定镜像ID或者image:tag
例子:docker rmi mysql:5.7.17
如果想强制删除镜像,可以带参数 -f, 例如
docker rmi -f mysql:5.7.17

  • 搜索镜像docker search

搜索docker hub上的镜像。例如我们想找有关mysql的镜像,然后再从中找出符合我们要求的镜像
docker search mysql
我们也可以做些过滤,添加option参数
过滤掉星星数量少于10个的mysql镜像
docker search -f stars=10 mysql
过滤掉automated=false的mysql镜像
docker search --filter=is-automated=true mysql

  • 导入镜像docker import
  • 镜像历史docker history

查看镜像的构建历史,例如:
docker history mysql

  • 镜像列表docker images

查看本地镜像列表,包括一些临时镜像
docker images -a
如果想过滤掉一些具有某种属性的镜像,则可以增添过滤条件,例如
docker images -f dangling=true

  • 查看镜像底层信息docker inspect

我们要查看mysql镜像底层的一些信息,是否对外暴露端口、文件挂载等,例如:
docker inspect mysql


docker容器服务

  • 运行容器docker run

运行容器,是容器操作中最为常见的操作,例如:
docker run -d --name mysql
-e MYSQL_ROOT_PASSWORD=root123
-p 3307:3306 mysql
下面详细说明下常用的命令行参数,红色部分最好能够掌握,是最常用的启动参数
容器运行于前台还是后台
-d, --detach=false 指定容器是否运行于前台,默认为false
-i, --interactive=false 是否以交互方式启动容器,通常与-t配合使用
-t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
挂载容器目录到宿主机目录
-w, --workdir="" 指定容器的工作目录
指定环境变量
-e, --env=[] 指定环境变量,容器中可以使用该环境变量
指定容器的运行内存上限
-m, --memory="" 指定容器的内存上限
暴露容器端口,以及容器与宿主机之间的端口映射
-p, --publish=[] 指定容器暴露的端口
指定容器的主机名,使用场景比较少
-h, --hostname="" 指定容器的主机名
映射容器的目录到宿主机目录
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
挂载其他容器存储卷岛容器目录
–volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
–device=[] 添加主机设备给容器,相当于设备直通
–dns=[] 指定容器的dns服务器
–dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
指定容器运行的入口,通常是一些脚本或者命令行
–entrypoint="" 指定容器的入口点
–env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
–expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
容器关联,多个容器共同完成一个服务时,比较常用,比如web服务需要后台服务、前段服务和数据库
–link=[] 指定容器间的关联,使用其他容器的IP、env等信息
指定容器运行时的名字
–name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
指定容器的网络
–net=“bridge” 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似–net=bridge)但是不进行配置
设置容器是否以超级权限运行
–privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
容器异常退出后的重启策略
–restart=“no”
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
–rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)

  • 进入容器docker exec

查看容器的运行状态

  • 运行状态 docker ps

docker ps 用于查看处于运行状态的容器,如果要查看所有状态的容器,可以添加参数-a,例如:docker ps -a,如果想过滤掉不关心的容器,可以添加过滤的参数,例如:查看包含关键字filter的容器,docker ps -a | grep ‘filter’ 查看处于运行停止状态的容器docker ps -a | grep Exited

  • 运行日志 docker logs

查看容器的运行日志, docker logs 后跟容器IDdocker logs ${containerId},如果想实时跟踪运行日志,可以添加参数-f,docker logs -f ${containerId}

  • 暂停容器 docker pause

将运行的容器导出为镜像文件

  • 导出容器 docker export

需要区分一下,和docker save功能类似,不同之处在于docker save为保存镜像为镜像文件,保存了镜像的所有信息,而docker export 为导出容器为镜像文件,同时会丢掉镜像运行的command,启动时需要在命令行指定相应的command,下面给出一个实例说明,启动一个正常的mysql镜像,命令如下:
docker run -d --name mysql \ -e MYSQL_ROOT_PASSWORD=root123 \ -p 3308:3306 mysql
然后我们将容器导出为mysql:v1,再重新导入,如下:
docker ps | grep mysql| awk '{print $1}' | xargs docker export > mysql-v1.tar
step2:导入为新的镜像文件:
cat mysql-v1.tar | docker import - mysql:v1
运行新的mysql容器实例,主要的区别在于,需要在启动的命令上指定command:
`docker run -d --name mysql-v1
-e MYSQL_ROOT_PASSWOR

  • 删除容器

删除一个或者容器,通常删除容器是对处于非正常运行的容器或者正常停止的容器,在删除容器前最好先用docker ps查看下状态,是否会导致数据丢失,查看确认没问题后再删除容器,可以用容器名或者容器ID删除,docker rm container_name container_id, 例如:
hexxdeMacBook-Pro:~ hexx$ docker ps -a af6ec418a29c mysql:v1 "docker-entrypoint.s…" 4 hours ago Exited (0) 36 minutes ago mysql-v1 150683faef0c mysql "docker-entrypoint.s…" 13 days ago Exited (0) 4 seconds ago mysql
docker rm mysql-v1 or docker rm af6ec418a29c
还有一种情况,也是比较常见的,需要停止正常运行的容器,再删除容器,
比如我们删除需要mysql,则需要先停止容器,再执行删除命令
docker stop mysql && docker rm mysql

  • 重启容器 docker restart

将处于运行状态的容器停止,然后再次启动容器,可以指定参数- t设定容器在多少秒后重启,例如:docker restart -t 10 mysql-v1

  • 恢复暂停 docker unpause

恢复暂停的容器,可以指定一个或多个容器,前提是在docker pause 操作之后,例如:docker unease mysql-v1

  • 拷贝文件 docker cp

将宿主机上的文件拷贝到容器或者将容器中的文件拷贝到宿主机,例如:将当前目录的file.txt文件拷贝到容器的/root目录下
docker cp file.txt mysql-v1:/root
或者将容器中的/root/file.txt文件拷贝到宿主机的/root/目录下,例如:
docker cp mysql-v1:/root/file.txt /root/

  • 提交容器 docker commit

将容器当前的状态写到新的镜像中,成为新的镜像(这种使用场景比较少,通常我们将构建步骤写入Dockerfile中,然后使用docker build来构建新镜像,这种方式可追溯,方便管理)例如:
docker commit mysql-v1 mysql:v2

你可能感兴趣的:(容器创建,docker)