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============ ...
随机推荐
- 17、linux root用户密码找回
17.1.救援模式: 光盘模式启动(第一启动项) 删除/mnt/sysimage/etc/passwd root的密码,halt重启. 改为硬盘启动模式,无密码进入root,为root新建密码 17. ...
- 友华新光猫PT924G破解telnet之路
最近去找电信要了个新的千兆光猫(电信宽带300兆配100兆光猫真鸡贼),背后一看不是华为了,是友华PT924G,在http://192.168.1.1:8080/里看到了熟悉的电信界面 用teleco ...
- 使用命令行操作MySQL 及 语法
在使用之前先要确保服务中的MySQL 已启动,否则会报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061 ...
- DRF之JWT认证
一.JWT认证 JWT构成 JWT分为三段式:头.体.签名(head.payload.sgin) 头和体是可逆加密的,让服务器可以反解析出user对象,签名是不可逆加密,保证整个token的安全性的. ...
- ROS2学习之旅(13)——创建ROS2 功能包
一个功能包可以被认为是ROS2代码的容器.如果希望能够管理代码或与他人共享代码,那么需要将其组织在一个包中.通过包,可以发布ROS2工作,并允许其他人轻松地构建和使用它. 在ROS2中,创建功能包使用 ...
- java基础---数组的查找算法(2)
一.查找的基本概念 查找分为有序查找和无序查找,这里均以数组为对象,有序查找指的是数组元素有序排列,无序查找指的是数组元素有序或无序排列 平均查找长度(Average Search Length,AS ...
- docker之构建镜像
构建Docker镜像有以下两种方法: 使用docker commit命令. 使用docker build命令和 Dockerfile 文件. 在这里并不推荐使用docker commit来构建镜像,而 ...
- postman使用笔记
postman主要是用来做接口测试的工具,用来模拟客户端向服务器发起请求. 一.postman支持的请求类型 1.get请求 get请求是用来向服务器获取数据 get请求没有请求体,只有url和请求头 ...
- Spring Boot(二):Spring Boot中的配置参数
Spring Boot 配置参数 Spring Boot 帮助我们完成了许许多多的自动化配置 如果我们需要根据自己的需求修改配置 也是可以的 可以使用.properties 和 .yml 格式配置 这 ...
- python基础之操作数据库(pymysql)操作
import pymysqlimport datetime#安装 pip install pymysql"""1.连接本地数据库2.建立游标3.创建表4.插入表数据.查询 ...