Docker Reference Documentationvue
Docker 从入门到实践 【中文】mysql
安装 Docker,设置开机启动,而后配置阿里云镜像加速web
Docker 官方安装redis
CentOS 官方安装教程,直接安装速度相对慢,推荐使用 使用脚本自动安装 Docker:sql
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
注意!registry-mirrors
须要替换成本身的 阿里云镜像加速器地址,经过点击地址获取docker
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["这里替换成本身的阿里云镜像加速器地址"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
CLI 是 Command-Line Interface (命令行界面)的缩写
命令详情能够参考官方文档:Docker Reference Documentationshell
这里经过几个场景,把 Docker 先用起来数据库
# 输入 docker 回车,docker 的命令会被罗列出来,便于查询 docker # 查询有那些 MySQL 镜像 docker search tomcat
相对于直接search,使用搜索 Docker Hub 更方便编程
搜索 Tomcatjson
能够看到相关的镜像介绍、使用帮助、历史版本: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
只是将 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开启端口
可参考官方文档: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: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 的位置
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 组件之间的关系