Docker 实践及命令梳理
文档
Docker Reference Documentation
安装
安装 Docker,设置开机启动,然后配置阿里云镜像加速
1. 安装 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 实践及命令梳理的更多相关文章
- 来自沪江、滴滴、蘑菇街架构师的 Docker 实践分享
架构师小组交流会是由国内知名公司架构师参与的技术交流会,每期选择一个时下最热门的技术话题进行实践经验分享. Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是 CI/CD.Dev ...
- Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享
架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...
- docker专题(2):docker常用管理命令(上)
http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备 ...
- Docker实践之02-使用镜像及定制
目录 一.获取镜像 二.使用镜像启动容器实例 三.列出镜像 四.删除本地镜像 五.定制镜像 通过commit命令定制镜像 通过Dockerfile定制镜像 docker build的工作原理 dock ...
- 你必须知道的容器监控 (1) Docker自带子命令与Weave Scope
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.本篇会介绍几个目前比较常用且流行的容器监控工具,首先我们来看看Docker自带的 ...
- docker实践之docker-compose部署mysql
文章目录 docker实践之docker-compose部署mysql 1.安装部署docker 2.编写docker-compose文件 3.编写配置文件和初始化文件 4.启动数据库 5.检查初始化 ...
- docker入门 基础命令 docker安装
docker入门 在学一门新知识的时候,超哥喜欢提问,why?what?how? wiki资料 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes ...
- Docker - Dockerfile - 常见命令简介
概述 感觉是个 比较重要的东西 有个疑问 我是先讲 docker build 还是 先讲 Dockerfile 穿插讲 docker build 最基本的东西 原理 -t -f docker file ...
- Docker 安装及命令
CentOS 安装 通过脚本安装:curl -sSL https://get.docker.com/ | sh通过yum安装:yum install docker-engine============ ...
随机推荐
- CSS3转换(transform)基本用法介绍
一个炫酷的网页离不开css的transform.transition.animation三个属性,之前一直没有涉及到这块内容,刚好最近要做一个相关东西,趁此机会好好学一学这三个属性. 一.功能 实现元 ...
- 15.3、mysql之InnoDB和MyISAM表空间详解
15.3.1.InnoDB引擎表空间: 1.表空间分类: 共享表空间: 某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在 data目录下. 默认的文件名为:ibd ...
- RabbitMQ 常用知识点总结
基础 为什么使用 MQ? 1.削峰:在某个模块接收到超过最大承受的并发量时,可以通过 MQ 排队来使这些削减同一时刻处理的消息量.减小并发量. 2.解耦:在发送 MQ 处理业务时,可以使业务代码与当前 ...
- Spring:Spring事务手动回滚方式
方法1: 在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句 ...
- 第三章 - CPU缓存结构和java内存模型
CPU 缓存结构原理 CPU 缓存结构 查看 cpu 缓存 速度比较 查看 cpu 缓存行 cpu 拿到的内存地址格式是这样的 CPU 缓存读 根据低位,计算在缓存中的索引 判断是否有效 0 去内存读 ...
- PHP安装amqp扩展 出现未装librabbitmq错误
这错误的原因是因为没有安装amqp的依赖包rabbitmq-c,需要先安装rabbitmq-c. 1.安装rabbitmq-c-0.7.1 没有安装就会提示上面的错误我选择的是最新版本0.7.1 wg ...
- org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class
错误:org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util ...
- Ha1cyon-CTF 芜湖
感觉自己还是很欠缺的,尤其是C++的逆向,对stl的不熟悉,直接误导我静态分析了...然后这种题和平常不同的是没有任何混淆和flag验证,需要的是耐心的分析,在过程中,找到线索,这题还考了base64 ...
- solr_hacktool
https://github.com/mustblade/solr_hacktool 最近复现了几个solr漏洞,没找到现成工具,就心血来潮写了个小玩具.没了.
- ARTS第一周
开始进行的第一周. 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思 ...