前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker常用命令

Docker常用命令

作者头像
码客说
发布2019-10-22 14:43:23
6900
发布2019-10-22 14:43:23
举报
文章被收录于专栏:码客码客

前言

什么是Docker? Docker就是一个容器,但是这个容器里什么都没有,所以我们根据需求不同就要不同的环境,这些环境就是镜像,我们可以用一个镜像生成多个容器,每个容器都有它的IDNAME

所以对于Docker的操作命令就可以分为三类:Docker命令 镜像命令容器命令

Docker命令

  • 查看docker版本
代码语言:javascript
复制
docker version
  • 显示docker系统的信息
代码语言:javascript
复制
docker info

镜像命令

下载镜像的地址阿里云镜像地址

  • 检索镜像
代码语言:javascript
复制
docker search image_name
  • 下载镜像
代码语言:javascript
复制
docker pull image_name
  • 列出镜像列表
代码语言:javascript
复制
docker images
  • 删除一个或者多个镜像
代码语言:javascript
复制
docker rmi image_name
  • 显示一个镜像的历史
代码语言:javascript
复制
docker history image_name
  • 保存和加载镜像(save、load)

当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。

代码语言:javascript
复制
# 保存镜像到一个tar包  
docker save image_name -o file_path  
# 加载一个tar包格式的镜像  
docker load -i file_path  
  
# 机器a导出tar包 
docker save image_name > /home/save.tar  
# 使用scp将save.tar拷到机器b上,然后:  
docker load < /home/save.tar
  • 添加镜像的名字和tag
代码语言:javascript
复制
docker tag imageid name:tag

容器命令

  • 启动容器
代码语言:javascript
复制
# 在容器中运行"echo"命令,输出"hello word"  
docker run image_name echo "hello word"  
  
# 交互式进入容器中  
docker run -i -t image_name /bin/bash  

# 在容器(ubuntu)中安装新的程序  
docker run image_name apt-get install -y app_name

举例

代码语言:javascript
复制
docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash

docker run -d -p 58080:8080 --name javaweb huangyong/javaweb:0.1 /root/run.sh

这条命令比较长,我们稍微分解一下,其实包含以下三个部分:

代码语言:javascript
复制
docker run <相关参数> <镜像 ID> <初始命令>

其中,相关参数包括:

  • -i:表示以“交互模式”运行容器
  • -t:表示容器启动后会进入其命令行
  • -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>. 假设我们的所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。
  • -d:表示以守护模式执行/bin/bash脚本,此时 Tomcat 控制台不会出现在输出终端上。
  • -p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
  • –name:表示容器名称,用一个有意义的名称命名即可。使用在Docker run的时候使用`--restart`参数来设置。 no - container:不重启. on-failure - container:退出状态非0时重启. always:始终重启. 需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,例如:docker.cn/docker/centos:centos6。
  • 查看容器
代码语言:javascript
复制
# 列出当前所有正在运行的container  
docker ps  
# 列出所有的container  
docker ps -a  
# 列出最近一次启动的container  
docker ps -l
  • 容器保存为镜像(commit)
代码语言:javascript
复制
docker commit ID new_image_name

如:

代码语言:javascript
复制
docker commit 57c312bbaad1 psvmc/javaweb:0.1

该容器的 ID 是57c312bbaad1,所创建的镜像名是psvmc/javaweb:0.1,随后可使用镜像来启动 Java Web 容器。

  • 导入导出
代码语言:javascript
复制
#可以使用 docker export 命令,导出容器快照到本地文件。
 sudo docker export 7691a814370e > ubuntu.tar

#可以使用 docker import 从容器快照文件中再导入为镜像
 sudo docker import - test/ubuntu:v1.0
  • 对容器的操作(rm、stop、start、kill、logs、diff、top、cp、restart、attach)
代码语言:javascript
复制
# 删除所有容器  
docker rm `docker ps -a -q`  
  
# 删除单个容器
docker rm Name/ID  
  
# 停止、启动、杀死一个容器  
docker stop Name/ID  
docker start Name/ID  
docker kill Name/ID  
  
# 从一个容器中取日志; -t 显示时间 
docker logs Name/ID  
  
# 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的  
docker diff Name/ID  
  
# 显示一个运行的容器里面的进程信息  
docker top Name/ID  
  
# 从容器里面拷贝文件/目录到本地一个路径  
docker cp Name:/container_path to_path  
docker cp ID:/container_path to_path  
  
# 重启一个正在运行的容器; 
docker restart Name/ID  
  
# 运行已运行容器的命令
docker attach ID 

# 退出attach
Ctrl+P+Q

# 在运行中的容器里运行命令
docker exec -t -i Name/ID /bin/bash

实际操作

下载Tomcat8镜像(操作方式见自定义Dockerfile构建镜像)

代码语言:javascript
复制
docker pull registry.cn-hangzhou.aliyuncs.com/psvmc/oraclejdk-tomcat8

查看镜像ID

代码语言:javascript
复制
docker images

运行镜像

代码语言:javascript
复制
docker run -d -p 8081:8080 --name tomcat01 -v /data/wwwroot/tomcat01/:/opt/tomcat8/webapps/  -v /data/wwwroot/tomcat01_log/:/opt/tomcat8/logs/ --restart=always 71dc929e155c

查看容器运行状态

代码语言:javascript
复制
docker ps -a

查看tomcat启动日志

代码语言:javascript
复制
docker logs tomcat01

我们运行了tomcat 那么怎样进入tomcat运行的环境呢

代码语言:javascript
复制
// docker exec意思是:在`tomcat01`下面运行一个命令,在这里,运行的是/bin/bash
// -t 表示分配一个pseudo-TTY,-i 表示可交互
// tomcat这个image的默认工作目录是/usr/local/tomcat
docker exec -t -i tomcat01 /bin/bash

接下来 我们退出tomcat的运行环境(Ctrl+P+Q)

把文件拷贝到容器中

代码语言:javascript
复制
docker cp /root/test.war tomcat01:/usr/local/tomcat/webapps/test.war

重启容器

代码语言:javascript
复制
docker restart tomcat01

常见问题

1) 怎样在一运行的容器中添加端口映射? 不能直接添加端口映射。只能先保存(commit)为镜像 再重新运行(run)

2) import/export 与 save/load 的区别? import应用于容器 save应用于镜像

3) Docker 容器运行后 自动启动服务 docker中的容器运行后 里面的服务就算设置了开机启动也不会启动。 解决方式是建一个文件/home/auto_service.sh

代码语言:javascript
复制
#!/bin/sh
service nginx start
service mysqld start
service tomcat7 start
/bin/bash

第一行不能少 来标示文件的类型 最后一行也不能少 否则会在服务启动后自动退出容器

运行命令

代码语言:javascript
复制
docker run -i -t --name javaweb -p 80:80 -p 8080:8080  fec9183579a7 /home/auto_service.sh

4) 无法ping容器的IP地址 无法用容器的ip ssh登录

代码语言:javascript
复制
I cannot ping my containers。 
Unfortunately, due to limitations in macOS, we’re unable to route traffic to containers, 	and from containers back to the host.

这是官网给的解释 由于macOS的限制。 所以在mac上只能把内部的22端口映射到外部 直接通过映射出来的端口访问

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Docker命令
  • 镜像命令
  • 容器命令
  • 实际操作
  • 常见问题
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档