Docker的使用

  • 为什么要使用Docker?
  • Docker的安装
    • Ubuntu
  • Docker常用指令
  • Docker的使用入门
  • 实例:配置 tomcat环境

为什么要使用Docker?

  • 可移植性部署。当我们在不同的环境工作时,需要为用到的工具配置环境,步骤较为繁杂,使用Docker可以一键让当前环境变为我们想要的环境,并根据业务需求指示,实时扩展或拆除应用程序和服务。
  • 轻量级。我们使用虚拟机需要真的去部署一个OS,需要占用大量资源,而Docker的镜像往往只有几十M。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
  • 更快速。为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。

本文主要讲docker的指令使用,不涉及太多原理。

Docker的安装

Ubuntu

卸载旧版本

sudo apt update
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt autoremove

2.安装需要的包

sudo apt update
sudo apt install apt-transport-https ca-certificates software-properties-common curl

3.添加 GPG 密钥,并添加 Docker-ce 软件源,这里还是以中国科技大学的 Docker-ce 源为例

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable"

4.添加成功后更新软件包缓存

sudo apt update

5.安装 Docker-ce

sudo apt install docker-ce

6.设置开机自启动并启动 Docker-ce(安装成功后默认已设置并启动,可忽略)

sudo systemctl enable docker
sudo systemctl start docker

7.测试运行

sudo docker run hello-world


出现这个界面即安装成功。
如果PULL速度太慢或者time out,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}

之后重新启动服务:

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

Docker常用指令

为了方便以下容器ID都用ubuntu-test表示,以下面这个例子,ubuntu-test和3a9f4163787c都可以表示容器的id

常规指令 介绍 格式 TIP
stop 停止一个运行中的容器 docker stop [容器id] docker stop ubuntu-test
start 开始一个暂停的容器 docker start [容器id]
pull 拉取一个镜像 docker pull [镜像] docker pull training/webapp
push 把镜像推送到远程docker hub上 docker push [username]/[镜像]
restart 重启容器 docker restart [容器id]
attach 对于参数-d的后台容器,进入后台容器(退出时容器会停止) docker attach [容器id]
exec 对于参数-d的后台容器,进入后台容器(退出时容器不停止) docker exec [run参数] [容器id] [命令] docker exec -it ubuntu-test /bin/bash
export 导出容器 docker export [容器id]>[自定义名称.tar] docker export ubuntu-test > ubuntu.tar
import 导入镜像 cat [目录/文件.tar] docker import - [自定义镜像名称]:tag
rm 删除一个停止状态的容器(docker container prune删除所有暂停状态的容器) docker rm [容器id]
rmi 删除镜像
port 查看端口信息 docker port [容器id]
top 查看容器进程信息 docker top [容器id]
inspect 查看容器信息 docker inspect [容器id]
images 列出本地镜像 docker images 输出说明:●REPOSITORY:表示镜像的仓库源●TAG:镜像的标签●IMAGE ID:镜像ID●CREATED:镜像创建时间●SIZE:镜像大小
search 搜索镜像 docker serarch [需要的镜像关键字] 输出说明:●NAME: 镜像仓库源的名称DESCRIPTION: 镜像的描述 ●OFFICIAL: 是否 docker 官方发布●stars: 类似 Github 里面的star,表示点赞、喜欢的意思。●AUTOMATED: 自动构建。
login 登录远程docker hub
logout 退出docker hub
tag 为镜像添加一个新标签 docker tag [镜像id] [镜像名称:标签]
RUN 介绍 TIP
功能 在容器内运行指令
输入格式 docker run [run参数] [指定镜像名称:tag] [命令] docker run -it ubuntu15:10 /bin/echo "helloworld!"
参数 默认:-t: 在新容器内指定一个伪终端或终端-i: 允许你对容器内的标准输入 (STDIN) 进行交互。-d:后台运行-P:将容器端口随机映射到本地-p:将容器端口映射到指定的本地端口(也可以指定网络地址) ● -p 127.0.0.1:666:5000 将容器的5000端口映射到127.0.0.1的666(默认tcp协议,如果要使用udp则在端口后面加/udp) ●–name xxx 以xxx命名容器.
# PS 介绍 TIP
功能 查看容器
输入格式 docker ps 参数
参数 ** 默认 **: 查看正在运行的容器 -a : 查看历史运行容器 -l: 查看最后运行的容器
输出 ** CONTAINER ID: ** 容器 ID。** IMAGE: ** 使用的镜像。** COMMAND: ** 启动容器时运行的命令。** CREATED: ** 容器的创建时间。** STATUS: ** 容器状态。** PORTS: ** 容器的端口信息和使用的连接类型(tcp\udp)。** NAMES:** 自动分配的容器名称。 STATUS状态有7种:●created(已创建)●restarting(重启中)●running(运行中)●removing(迁移中)●paused(暂停)●exited(停止)●dead(死亡)
#logs 介绍 TIP
功能 查看容器内的标准输出
格式 docker logs [容器id] docker logs ubuntu-test
参数 -f:docker logs 像使用 tail -f 一样来输出容器内部的标准输出。 docker logs -f ubuntu-test
# commit 介绍 TIP
功能 更新镜像
格式 docker commit [commit参数] [容器id] [自定义镜像名] docker commit -m="update" -a="TIOOO" ubuntu-test my_ubuntu
参数 -m: 提交的描述信息 -a: 指定镜像作者容器 ID指定要创建的目标镜像名
输出
# network 介绍 格式 TIP
creat 创建一个新的docker网络 docker network create [参数] [自定义名称] -d :参数指定 Docker 网络类型,有 bridge、overlay。
ls 查看docker网络 docker newwordk ls

构建镜像

Dockerfile

Dockerfile 介绍 格式 TIP
dockerfile 用来构建镜像的文件。 在目录下新建文件 tips1:每一次执行命令,都会在docker上新建一层,尽可能减少层数,可使用 && 连接命令tips2:Dockerfile文件目录下,不要放多余无用文件
FROM 指定镜像 FROM nginx 在指定镜像的基础上运行
RUN 执行命令,在docker build时执行 shell:RUN <命令行命令> #与终端shell命令一样exec:RUNR ["可执行文件","参数1","参数2"] RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
COPY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。 COPY[–chown=:]<源路径1>…<目标路径> [–chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组。<源路径>:源文件或者源目录,这里可以是通配符表达式<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
ADD 与COPY一样,会自动解压gzip,bzip2,xz文件 不推荐使用
CMD 类似于 RUN 指令,用于运行程序,在docker run时执行 CMD <shell 命令>CMD ["<可执行文件或命令>","","",…]CMD ["","",…]# 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数 如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
ENTRYPOINT 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。 ENTRYPOINT ["","","",…] ●假设已通过 Dockerfile 构建了 nginx:test 镜像:FROM nginxENTRYPOINT [&quot;nginx&quot;,&quot;-c&quot;]# 定参CMD [&quot;/etc/nginx/nginx.conf&quot;]# 变参 ●1、不传参运行$ docker run nginx:test容器内会默认运行以下命令,启动主进程。nginx -c /etc/nginx/nginx.conf ●2、传参运行$ docker run nginx:test -c /etc/nginx/new.conf容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)nginx -c /etc/nginx/new.conf
ENV 设置环境变量 ENV ENV ==… 可通过$key 引用变量
ARG 与ENV功能一样,作用域只在docker build中 ARG <参数名>[=<默认值>] 构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。
VOLUME 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。 VOLUME ["<路径1>","<路径2>"…]VOLUME <路径> ●避免重要的数据,因容器重启而丢失,这是非常致命的。●避免容器不断变大。在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
EXPOSE 声明端口。 EXPOSE <端口1>[<端口2>…] ●帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。●在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
WORKDIR 指定工作目录。 WORKDIR <工作目录路径> ●用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。●docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
USER 用于指定执行后续命令的用户和用户组 USER <用户名>[:<用户组>] 切换后续命令执行的用户(用户和用户组必须提前已经存在)
HEALTHCHECK 用于指定某个程序或者指令来监控 docker 容器服务的运行状态 ●HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令 ●HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令 ●HEALTHCHECK [选项] CMD <命令>:这边CMD 后面跟随的命令使用,可以参考CMD 的用法。
ONBUILD 用于延迟构建命令的执行 ONBUILD <其它指令> ●Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。●当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这是执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。
# build 介绍 TIP
功能 创建一个新的镜像
格式 docker bulid [build参数] [Dockerfile文件路径] docker build ~/docker/Dockerfile
参数 -t 设置镜像名称
输出

Docker的使用入门

1.搜索、拉取镜像
docker search
docker pull
2.创建、运行容器
docker run
3.维护容器
docker ps
docker start、stop、restart
docker rm
4.维护镜像
docker images
docker commit(更新镜像)
docker push (上传镜像)
docker export (导出容器)
docker import (导入镜像)

实例:配置 tomcat环境

#搜索tomcat镜像源

docker search tomcat

*# 拉取 tomcat 镜像源

docker pull tomcat

#查看 tomcat 镜像
docker images|grep tomcat

#建立一个工作目录
cd ~/docker && mkdir test

#在 tomcat 镜像上运行一个容器 -d :后台运行 --name :指定名称为 tomcat_test -p : docker**** 的 8080 映射到本地的 8088 端口 -v :将主机当前目录的 test挂载到容器的/test

#docker run -d --name tomcat_test -p 8088:8080 -v $PWD/test:/usr/local/tomcat/webapps/test tomcat**

#查看tomcat 运行状态
docker ps

echo "hello world!">./test/index.html

# 打开127.0.0.1:8088/test即可看到 hello world!

查找镜像
Docker Hub 网址为: https://hub.docker.com/
注册时人机验证可能需要科学上网。

参考资料:
https://www.runoob.com/docker/docker-tutorial.html

看了这篇Docker指令详解,网友直呼:我收藏了你呢?相关推荐

  1. 云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)

      前面给大家项目的介绍了Docker的基础内容 Docker基础篇 接下来给大家系统的介绍下Docker高级篇的内容:网络核心.Docker实战.DockerCompose.Harbor以及Swar ...

  2. Vue.js 源码分析(二十三) 指令篇 v-show指令详解

    v-show的作用是将表达式值转换为布尔值,根据该布尔值的真假来显示/隐藏切换元素,它是通过切换元素的display这个css属性值来实现的,例如: <!DOCTYPE html> < ...

  3. software reporter tool占用高_看完这篇DBA工作详解,你觉得平均月薪17000真的高吗?...

    DBA(数据库管理员)是企业关键业务应用中非常重要的角色, 数据库管理系统 (DBMS)管理和维护的守护神,位置举足轻重.然而在企业招聘中极少出现相关岗位,更多时候出现在删库跑路的段子里面. 据了解, ...

  4. Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解

    前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY  <源路径> .. ...

  5. Dockerfile 指令详解1

    Dockerfile 指令详解 我们已经介绍了 FROM,RUN,还提及了 COPY, ADD,其实 Dockerfile 功能很强大,它提供了十多个指令.下面我们继续讲解其他的指令. COPY 复制 ...

  6. Docker全面详解(二)

    3. run运行流程图 4. 底层原理 4.1. Docker是怎么工作的 4.2. Docker为什么比VM快? 5. Docker的常用命令(重) 5.1. 帮助命令 5.2. 镜像命令(基础) ...

  7. 【Bluetooth LE】Bluez中Bluetoothctl指令详解(连接iPhone为例)

    Bluez中Bluetoothctl指令详解 写在前面 准备硬件和软件 ubantu&bluez版本 iPhone&LightBlue Bluetoothctl指令列表 Bluetoo ...

  8. AndroidManifest.xml文件配置教程及相关指令详解

    AndroidManifest.xml 是每个android程序中必须的文件,它位于整个项目的根目录.我们每天都在使用这个文件,往里面配置程序运行所必要的组件,权限,以及一些相关信息.但是对于这个文件 ...

  9. arm-linux-ld中的参数,arm-linux-ld指令详解

    arm-linux-ld指令详解 我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来:其次,这些.o文件存在相互调用的关系 ...

最新文章

  1. 使用xmanager连接centos5.5
  2. 在大城市打拼的你,是想留下还是想攒够了钱回家?
  3. JS 装饰器(Decorator)场景实战
  4. union all会影响性能吗_哪些因素会影响悬臂式掘进机的性能?
  5. Flask框架——路由和视图
  6. 通过Bigtop编译Hadoop组件的rpm包
  7. 看看20万码农怎么评论:女生做程序员是一种怎样的体验?
  8. VS2008使用技巧及快捷键大全
  9. am3352 项目记录
  10. Ubuntu16.04 解决外置USB蓝牙模块链接蓝牙耳机没有声音输出问题
  11. 【总结】知识点巩固------Linux命令总结
  12. 如何使用 Yahoo! Finance stock API 获取股票数据
  13. stream根据某个字段去重(对象的某个字段去重)
  14. cleanmymac苹果电脑必备mac系统垃圾清理工具分享
  15. solr6.4服务器+Tomcat+中文分词器
  16. 使用Android Studio调试系统应用之TvSettings(一):移植
  17. 卡巴斯基实验室被攻陷后的四个未解之谜
  18. android轻音乐,「睡眠周期时钟」搭配轻音乐,让你好好睡又舒服醒(Android)
  19. oralce字符串函数
  20. 总结的人工智能领域论文搜索链接,大部分可用。

热门文章

  1. “查看更多”功能,较完美的实现
  2. Excel Application对象应用大全
  3. 如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?
  4. 【洛谷P1903】数颜色
  5. 内容管理系统CMS简介
  6. 企业级大数据平台智能运维好帮手——星环科技多模数据平台监控软件Aquila Insight
  7. auto.js 快手自动评论脚本 引流操作
  8. 前端JavaScript(1) --Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏...
  9. iOS 面试基础题目
  10. 求1-1/2+1/3-1/4+...+1/99-1/100。