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

Docker简介、常用命令与实践(二)

作者头像
唐成勇
发布2019-05-26 10:56:45
4900
发布2019-05-26 10:56:45
举报
文章被收录于专栏:唐成勇唐成勇

【上一篇:Docker简介、常用命令与实践(一)】

六、Docker镜像操作

6.1 获取镜像(下载镜像到本地)

Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。

从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

代码语言:javascript
复制
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

docker中拉取指定版本的镜像比如:

代码语言:javascript
复制
docker pull mongo:3.2.4

dockre pull redis:3.2

具体的选项可以通过 docker pull --help

6.2 列出本地镜像

要想列出已经下载下来的镜像,可以使用docker image lsdocker images命令。

6.3 删除本地镜像

如果要删除本地的镜像,可以使用 docker image rm 命令,其格式为:

代码语言:javascript
复制
$ docker image rm [选项] <镜像1> [<镜像2> ...]

七、Docker容器操作

7.1 说在前面

/bin/bashlinux的命令行工具,类似于windowcmd进入dos系统。

7.2 查看容器

代码语言:javascript
复制
docker ps   #查看启动的容器

docker ps -a   #查看所有容器,包含没有启动的容器

7.3 启动容器

代码语言:txt
复制
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(`stopped`)的容器重新启动。
代码语言:txt
复制
因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。    

语法:

代码语言:javascript
复制
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

COMMAND: 容器启动后进入容器中要执行的命令.

OPTIONS:(常用选项)

代码语言:javascript
复制
-d: 让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下
-t: 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, 
-i: 则让容器的标准输入保持打开。
-name:为容器命名
-v:  创建数据卷
-p:  绑定端口

7.3.1 基于镜像新建一个容器并启动

代码语言:javascript
复制
docker run 

docker run命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令

例如:

代码语言:javascript
复制
docker run -p 5000:5000 –name web training/webapp

7.3.2 后台运行

代码语言:txt
复制
更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 `-d` 参数来实现。
代码语言:javascript
复制
$ docker run -d  CONTAINER [CONTAINER...]

例如:

代码语言:javascript
复制
docker run –d –p 5000:5000 training/webapp

7.3.3 交互运行

启动一个 bash 终端,允许用户进行交互。

代码语言:javascript
复制
$ docker run -it  CONTAINER [CONTAINER...]  /bin/bash

-t:选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,

-i: 则让容器的标准输入保持打开。

在交互模式下,用户可以通过所创建的终端来输入linux命令

例如:创建centos容器并且进入centos容器中

代码语言:javascript
复制
docker run -it centos /bin/bash

7.4 终止容器

代码语言:javascript
复制
$ docker stop  CONTAINER [CONTAINER...]

例如:

代码语言:javascript
复制
docker run –d –p 5000:5000 training/webapp

7.5 启动一个停止的容器

代码语言:javascript
复制
$ docker start CONTAINER [CONTAINER...]

例如:

代码语言:javascript
复制
docker stop web

7.6 重启容器

代码语言:javascript
复制
$ docker restart CONTAINER [CONTAINER...]

例如:

代码语言:javascript
复制
docker restart web    

7.7 删除容器

代码语言:javascript
复制
$ docker rm  CONTAINER [CONTAINER...]

例如:

代码语言:javascript
复制
docker rm web  

7.8 获取容器的输出信息

代码语言:javascript
复制
$ docker logs CONTAINER [CONTAINER...]

例如:

代码语言:javascript
复制
docker logs web  

7.9 进入容器

docker exec :在运行的容器中执行命令

语法

代码语言:javascript
复制
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS说明:

-d :分离模式: 在后台运行-i :即使没有附加也保持STDIN 打开 -t :分配一个伪终端

代码语言:javascript
复制
$ docker exec –it  CONTAINER /bin/bash

例如:

代码语言:javascript
复制
docker exec –it   web   

7.10 主机和容器间拷贝

7.10.1.容器拷贝到主机

代码语言:javascript
复制
docker cp ed0f8bb24f3e:/opt/webapp/app.py   d:/www

ed0f8bb24f3e: 容器id

/opt/webapp/app.py: 容器中的文件

d:/www: 主机文件夹

7.10.2.主机拷贝到容器

代码语言:javascript
复制
docker cp d:/www/文件  ed0f8bb24f3e:/opt/webapp/   

7.11 给镜像打上标签(tag)

tag的作用主要有两点:一是为镜像起一个容易理解的名字,二是可以通过docker tag来重新指定镜像的仓库,这样在push时自动提交到仓库。

将同一IMAGE_ID的所有tag,合并为一个新的

代码语言:javascript
复制
# docker tag 195eb90b5349 seanlook/ubuntu:rm_test

新建一个tag,保留旧的那条记录

代码语言:javascript
复制
# docker tag Registry/Repos:Tag New_Registry/New_Repos:New_Tag

八、数据卷

8.1 什么是数据卷

数据卷 是一个可供一个或多个容器使用的特殊目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。数据卷设计的目的在于对**数据的持久化**,它完全独立于容器的生命周期,因此Docker不会在删除容器时删除其挂载的数据卷,也不会存在类似垃圾收集的机制。

数据卷提供很多有用的特性:

  1. 数据卷 可以在容器之间共享和重用
  2. 对数据卷的修改会立马生效
  3. 对数据卷的更新,不会影响镜像
  4. 数据卷默认会一直存在,即使容器被删除

注意:数据卷的使用,类似于Linux下对目录或文件进行mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。

8.2 为什么要使用数据卷

将本地主机中的代码运行在docker容器中。

8.3 挂载数据卷的前提

授权本地磁盘

8.4 挂载一个主机目录作为数据卷

8.4.1 第一种挂起一个数据卷

运行一个nginx容器 ,-v 挂起一个卷,nginx用来访问网页的地址 , -d 以守护进程来运行,--name 给一个名字

代码语言:javascript
复制
docker run -d --name nginx -v /usr/share/nginx/html/ nginx

检查容器的运行状态

代码语言:javascript
复制
docker inspect nginx   

对index.html文件做一些改动

代码语言:javascript
复制
echo "hello docker" > index.html

8.4.2 第二种通过本地目录挂载到容器里面的数据卷中去

代码语言:javascript
复制
docker run -p 8090:80 -d -v $PWD/html:/usr/share/nginx/html nginx

docker run -d -v d:/www/webapp:/opt/webapp  training/webapp 

8.4.3 第三种创建一个仅仅提供数据的容器,把这个容器当做volume挂载到其它容器里面去

代码语言:javascript
复制
# -v 表示的是volume(数据卷)  --name 名字 nginx 是这个容器的基础镜像
docker create -v $PWD/data:/usr/share/nginx/html --name data_container nginx 

运行一个新的容器,把上面提供数据的容器当做数据卷挂载到当前的容器中运行,-it表示交互的方式运行,会直接进入到这个容器中

代码语言:javascript
复制
docker run -it --volumes-from data_container nginx /bin/bash  
root@772cbe131d01:/usr/share/nginx/html# echo "Hello Nginx&Docker" > index.html

退出容器查看data目录:

九、常见疑问

  • Docker的容器是以镜像来创建的,镜像是不是一个类似操作系统的环境?

是的,你可以将Docker理解为一个轻量化的虚拟机,至于我们经常说的什么Tomcat镜像、MySQL镜像之类的,只是这个轻量化的虚拟机中安装了相应的软件。镜像的名字也就说明了镜像的功能。

  • 是不是到正式环境上还要安装Docker,然后把应用部署在其中?

是的,构建Docker镜像、运行Docker容器,都需要安装Docker,但这是一劳永逸的,因为我们使用的是安装了各种各样功能软件的Docker镜像和Docker容器。

参考教程:Docker之编程环境应用

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【上一篇:Docker简介、常用命令与实践(一)】
  • 六、Docker镜像操作
    • 6.1 获取镜像(下载镜像到本地)
      • 6.2 列出本地镜像
        • 6.3 删除本地镜像
        • 七、Docker容器操作
          • 7.1 说在前面
            • 7.2 查看容器
              • 7.3 启动容器
                • 7.3.1 基于镜像新建一个容器并启动
                • 7.3.2 后台运行
                • 7.3.3 交互运行
              • 7.4 终止容器
                • 7.5 启动一个停止的容器
                  • 7.6 重启容器
                    • 7.7 删除容器
                      • 7.8 获取容器的输出信息
                        • 7.9 进入容器
                          • 7.10 主机和容器间拷贝
                            • 7.10.1.容器拷贝到主机
                            • 7.10.2.主机拷贝到容器
                          • 7.11 给镜像打上标签(tag)
                          • 八、数据卷
                            • 8.1 什么是数据卷
                              • 8.2 为什么要使用数据卷
                                • 8.3 挂载数据卷的前提
                                  • 8.4 挂载一个主机目录作为数据卷
                                    • 8.4.1 第一种挂起一个数据卷
                                    • 8.4.2 第二种通过本地目录挂载到容器里面的数据卷中去
                                    • 8.4.3 第三种创建一个仅仅提供数据的容器,把这个容器当做volume挂载到其它容器里面去
                                  • 九、常见疑问
                                  相关产品与服务
                                  容器服务
                                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档