文档

Docker Reference Documentation

Docker 从入门到实践 【中文】

安装

安装 Docker,设置开机启动,然后配置阿里云镜像加速

1. 安装 Docker

Docker 官方安装

CentOS 官方安装教程,直接安装速度相对慢,推荐使用 使用脚本自动安装 Docker

curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# 开机启动 docker
sudo systemctl enable docker
# 启动 docker
sudo systemctl start docker

2. 阿里云镜像加速

注意!registry-mirrors 需要替换成自己的 阿里云镜像加速器地址,通过点击地址获取

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["这里替换成自己的阿里云镜像加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker CLI

CLI 是 Command-Line Interface (命令行界面)的缩写

命令详情可以参考官方文档:Docker Reference Documentation

这里通过几个场景,把 Docker 先用起来

场景0:Tomcat

# 输入 docker 回车,docker 的命令会被罗列出来,便于查询
docker # 查询有那些 MySQL 镜像
docker search tomcat

相对于直接search,使用搜索 Docker Hub 更方便

搜索 Tomcat

可以看到相关的镜像介绍、使用帮助、历史版本:Tomcat

可以按照文档中的 "How to use this image" 的提示来运行镜像

# 拉取 tomcat 镜像
docker pull tomcat:8.0-jre8 # 查看镜像列表,可以看到 tomcat 镜像,该命令等特于:docker image ls
docker images # 运行tomcat 镜像
docker run tomcat:8.0-jre8 # 前台运行,会输出 tomcat 日志
# 按 Ctrl + C 停止 # 添加 -d 后台运行参数
docker run -d tomcat:8.0-jre8
# 查看容器列表,可以查看到容器的id、镜像(IMAGE)、状态(STATUS)、网络端口(PROT)、容器名称(NAME)等信息
docker ps
# 查看 tomcat 日志,这里的 `clever_swanson` 为容器id或名称
docker logs clever_swanson
# 查看容器内部进程信息
docker top clever_swanson # 进入容器
# i 和 t 参数可以让我们以伪终端的方式进入容器
# bash 是所使用 shell
docker exec -it clever_swanson bash
# 在容器内可以使用 Linux 命令 # 退出容器,回到宿主机(宿主机就是安装 Docker 的这台机器)
exit # 不需要容器了,可以停止容器
docker stop clever_swanson
# 查看容器列表,tomcat 就隐藏了
docker ps
# -a 参数查看全部所有容器的列表(包括停止的 tomcat)
docker ps -a # 启动已经停止的容器
docker start clever_swanson # 删除容器,如果容器还在运行需要加 -f 参数
docker rm clever_swanson
docker rm -f clever_swanson # 删除了容器,就可以把镜像也删除了,如果有容器还是该镜像需要加 -f 参数
docker rmi tomcat:8.0-jre8
docker rmi -f tomcat:8.0-jre8

场景1:Tomcat

只是将 Tomcat 容器 run 起来,还是无法满足使用

还需要将容器网络端口映射到宿主机才可以使得外部可以访问容器内部服务

为了方便还需要把 Tomcat 的数据目录和配置目录挂载到宿主机,方便直接进行编辑

可参考官方文档:Tomcat

# 部署 Tomcat
# run 容器时,本地不存在对应镜像,会自动 pull
# -p 将容器内的网络端口映射到宿主机 ,8080:8080 前面为宿主机,后面为容器
# --name 指定容器名称
docker run -p 8080:8080 -d --name mytomcat tomcat:8.0-jre8 # 可以通过 docker 的子命令对 容器进行操作,比如:ps,exec,top,stop # 这个容器已经占用了宿主机的 8080 端口,为了后续的 Tomcat 可以绑定到宿主机的 8080 端口,所以将 这个容器 stop
docker stop mytomcat # 通过数据卷的方式 将容器内的数据映射到宿主机
# 语法:- v 数据卷名称:容器内目录
# Tomcat 部署的 web应用目录:/usr/local/tomcat/webapps
# 配置文件:/usr/local/tomcat/conf
docker run -p 8080:8080 -v apps:/usr/local/tomcat/webapps -v confs:/usr/local/tomcat/conf -d --name mytomcat2 tomcat:8.0-jre8

这个时候 Tomcat 已经启动了,可以通过 http://ip宿主机:8080 来访问 Tomcat 的默认主页,例如我的访问地址 http://192.168.43.166:8080 ,看到汤姆猫的图标就成功了。如果访问失败,可能是对应的 8080 端口没有开放,CentOS7 可以参考:CentOS7开启端口

场景2:MySQL

可参考官方文档:MySQL

# 通过 -e 指定参数,指定 MySQL 的 root 账户的密码为:1234
docker run --name mysql -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -d mysql:5.7.32 # 停止容器,防止端口占用
docker stop mysql # 数据库的数据将会随着容器消失而消失,所以需要将数据库文件持久化到宿主机,
# 配置映射到本地
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -d -v mysqldata:/var/lib/mysql -v mysqlconfig:/etc/mysql mysql:5.7.32

MySQL 就成功运行了,可以通过 Navicat 或者其他工具测试数据库,地址为宿主机 ip地址,用户名为 root,密码为:1234,可以尝试存储数据,数据会被存储在数据卷,这里指定的数据卷名称为:mysqldata

# 查看所有数据卷
docker volume ls
# 查看 MySQL 的数据卷
docker inspect mysqldata
# 返回的 json 对象,其中 Mountpoint 的值就是,文件对应挂载的位置 # 我这里挂载的地址为:/var/lib/docker/volumes/mysqldata/_data
# 进入这个目录,就可以看到存储的文件

使用数据卷的好处在于:容器被移除了,重新运行一个新容器,直接挂载原来的数据卷就可了,数据不会丢失

# 移除容器
docker rm -f mysql2
# 重新运行新的容器,并挂载原来的数据卷
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -d -v mysqldata:/var/lib/mysql -v mysqlconfig:/etc/mysql mysql:5.7.32

Redis

可参考官方文档:Redis

需要注意的是:Redis 需要在镜像名称即 redis:5.0.10 的后面添加 redis-server --appendonly yes ,以此覆盖镜像默认的命令

docker run --name redis -p 6379:6379 -d redis:5.0.10

# 停止容器,防止端口占用
docker stop redis # 开启持久化 redis-server --appendonly yes
# 开启后,持久化生成的 aop 文件会被放入容器中的 /data 目录中
docker run --name redis2 -p 6379:6379 -d -v redisdata:/data redis:5.0.10 redis-server --appendonly yes
# 可以使用 Redis Desktop Manager 等工具,通过宿主机 ip 连接,进行测试

清理容器

# 查看容器列表可以看到很多容器
docker ps
# -a 可以看到所有的容器,包括已经停止的
docker ps -a
# 如果忘记了参数或者命令可以在命令后面加上 --help,会有提示
docker ps --help
# 可以看到:-q, --quiet Only display container IDs,即:-q参数仅输出容器id,结合 -a,可以输出所有容器的 id
docker ps -aq
# 结合 rm -f 就可以移除所有的容器了
docker rm -f $(docker ps -aq) # 清除没有用到的数据卷,有重要数据要谨慎
docker volume prune

docker

我们可以通过下面的命令,来找到 docker 的位置

whereis docker
# 我这里执行返回的结果是:docker: /usr/bin/docker /etc/docker /usr/libexec/docker /usr/share/man/man1/docker.1.gz

可以看到 docker 的可执行文件位于 /usr/bin,这个路径存在环境变量 PATH 中,所以我们可以在任意路径 使用 docker 命令

Docker 是 C/S 架构模式(客户端-服务器),所以上面的 docker 实际上是 Docker 的客户端,Docker 的服务器是 Docker Deamon 对应的就是 dockerd,也在这个目录下,Deamon 就是 Docker 引擎,Docker 客户端通过 Docker API 与 Deamon 进行通信

docker 是一个可执行程序,包含了许多命令,输入

docker --help

会将 Usage(用法)、Option(选项)、Commands(命令)都展示出来,Management Commands 也s是 Commands。每个命令可能会有它自己的子命令、选项

# run 命令有许多的选项
docker run --help
# volume 命令有许多子命令,例如:ls, rm, inspect
docker volume --help

命令梳理

使用 --help 参数,就可以查询到到对应命令的使用方法,所以我们只要理解 Docker 命令的框架即可,不用记忆命令细节

对镜像进行操作:images, rmi, search

对容器进行操作:run, stop, start, restart, exec, logs, top

其他:ps, cp, info, pull, version

还有一些 Management Commands,例如:image, network, volume

这些命令都是名词,即要操作的对象,而具体的操作通过其子命令指定,语义更加清晰

image 常用子命令:ls, rm, prune

network 常用子命令:create, ls, inspect, rm, prune

volume 常用子命令:同上面 network 的四个

参考资料

Install docker using the convenience script

【编程不良人】Docker容器技术&Docker-Compose实战

Docker组件

Docker 组件之间的关系

Docker 实践及命令梳理的更多相关文章

  1. 来自沪江、滴滴、蘑菇街架构师的 Docker 实践分享

    架构师小组交流会是由国内知名公司架构师参与的技术交流会,每期选择一个时下最热门的技术话题进行实践经验分享. Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是 CI/CD.Dev ...

  2. Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享

    架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...

  3. docker专题(2):docker常用管理命令(上)

    http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备 ...

  4. Docker实践之02-使用镜像及定制

    目录 一.获取镜像 二.使用镜像启动容器实例 三.列出镜像 四.删除本地镜像 五.定制镜像 通过commit命令定制镜像 通过Dockerfile定制镜像 docker build的工作原理 dock ...

  5. 你必须知道的容器监控 (1) Docker自带子命令与Weave Scope

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.本篇会介绍几个目前比较常用且流行的容器监控工具,首先我们来看看Docker自带的 ...

  6. docker实践之docker-compose部署mysql

    文章目录 docker实践之docker-compose部署mysql 1.安装部署docker 2.编写docker-compose文件 3.编写配置文件和初始化文件 4.启动数据库 5.检查初始化 ...

  7. docker入门 基础命令 docker安装

    docker入门   在学一门新知识的时候,超哥喜欢提问,why?what?how? wiki资料 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes ...

  8. Docker - Dockerfile - 常见命令简介

    概述 感觉是个 比较重要的东西 有个疑问 我是先讲 docker build 还是 先讲 Dockerfile 穿插讲 docker build 最基本的东西 原理 -t -f docker file ...

  9. Docker 安装及命令

    CentOS 安装 通过脚本安装:curl -sSL https://get.docker.com/ | sh通过yum安装:yum install docker-engine============ ...

随机推荐

  1. 『无为则无心』Python序列 — 21、Python字典及其常用操作

    目录 1.字典的应用场景 2.字典的概念 3.创建字典的语法 4.字典常见操作 (1)字典的增加操作 (2)字典的删除操作 (3)字典的修改 (4)字典的查找 (5)copy()复制 1.字典的应用场 ...

  2. 14 Nginx访问日志自动按天切割

    #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin LOG_DIR=/usr/loc ...

  3. 16、如何将安装在chrome上的插件(扩展程序)打包成".crx"文件

    1.打开扩展程序: 2.打开开发者模式并选择要打包的插件: 3.打包扩展程序: (1) (2) (3)

  4. Cobra框架使用手册

    cobra框架使用手册 cobra是go语言的一个库,可以用于编写命令行工具. 概念 Cobra 结构由三部分组成:命令 (commands).参数 (arguments).标志 (flags).最好 ...

  5. 记一次ios下h5页面图片显示问题

    刚入职公司时做了一个移动端图片预览的组件,之前也有业务组用过,没发现什么问题,但是这次有两个很诡异的问题. 一个是老数据的图不显示,另一个是图片点击预览只显示一部分加载不全.之所以诡异是所有设备都没问 ...

  6. 常用API文字版

    常用API Object类 jvm启动,默认导入的是java.lang包中的内容,该包下的内容不需要import进行导入. 概念 该类是java体系中的根类,所有对象都将该类作为直接或者间接父类 所有 ...

  7. DL基础补全计划(二)---Softmax回归及示例(Pytorch,交叉熵损失)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  8. Java中有趣的移位操作!彻底弄懂各个移位操作符的使用方式

    << <<: 左移运算,左移几位就补几个0 >> >>: 右移运算,为算术右移 如果数字为正数时,移位后在前面补0 如果数字为负数时,移位后在前面补1 ...

  9. ubuntu 更换apache网站根目录/var/www/html及端口

    1)修改/etc/apache2/ports.conf 80是默认监听端口,所以可以新增一个监听端口8010 2)在/etc/apache2/sites-available目录新增配置文件auto-t ...

  10. 严重:Exception sending context initialized event to listener instance of class [myJava.MyServletContextListener] java.lang.NullPointerException

    以上错误是我在自定义Servlet监听器时遇到的,首先大致介绍一下我要实现的功能(本人刚开始学,如有错误,请多多指正): 为了统计网站访问量,防止服务器重启后,原访问次数被清零,因此自定义监听器类,实 ...