Docker学习2.0-镜像、容器命令
基本操作
1. 镜像操作
镜像名称=[repository]:[tag] (名字:版本)
- tag 不写,默认是“latest”
# 构建镜像
docker build
# 从服务器拉取镜像
docker pull
# 查看镜像
docker images
# 删除镜像
docker rmi 镜像名
# 推送镜像
docker push
# 打包镜像
docker save -o 包名.tar 镜像名
# 加载镜像
docker load -i 包名.tar
# 查看帮助文档
docker --help
docker xx --help
2. 容器操作
容器暂停:保留缓存
容器停止:杀死进程
# 创建容器并运行
docker run --name 容器名称 -p 宿主机端口:容器端口 -d 镜像名
# 容器暂停
docker pause
# 容器再运行
docker unpause
# 容器停止
docker stop
# 容器再运行
docker start
# 查看日志
docker logs -f 容器名称
# 查询所有 运行的 容器及状态
docker ps
# 查询所有容器及状态
docker ps -a
# 进入容器执行命令
docker exec -it 容器名称 bash
# 退出容器
exit
# 删除未运行的容器 删除数据
docker rm 容器名称
# 强制删除容器 删除数据
docker rm -f 容器名称
进入容器内部修改文件
容器内部 vi 命令 无效
- 镜像只是打包应用程序必备的系统函数库
解决方法
- 使用 sed 命令 替换
sed -i 's#原文#替换值#g' 文件名.后缀
3. 数据卷(容器数据管理)
问题:
- 容器与数据耦合
- 数据不可复用
- 升级维护困难
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
数据卷:
- 容器的数据与宿主机关联的数据同步修改
- 多个容器挂载同一个数据卷
- 若容器删除,数据卷、宿主机数据并不删除,保证数据安全
docker volume [COMMAND]
- create 数据卷名 # 创建数据卷
- inspect 数据卷名 # 显示一个或多个数据卷的信息
- ls # 列出所有数据卷
- prune # 删除未使用的数据卷
- rm 数据卷名 # 删除指数据卷
数据卷挂载
docker run --name 容器名 -v 数据卷名:容器目录 -p 宿主机端口:容器端口 镜像名
- 如果容器运行时volume不存在,会自动被创建出来
4. 目录挂载(mysql实践)
- -v [宿主机目录]:[容器内目录]
- -v [宿主机文件]:[容器内文件]
4.1 下载mysql镜像
docker pull mysql:8.0
4.2 数据存储
# 创建目录
mkdir -p /home/youwhua/mysql/data
4.3 配置
# 创建目录
mkdir -p /home/youwhua/mysql/conf
# 配置文件 my.cnf
[mysql]
#设置mysql客户端默认字符集
default-character-set=UTF8MB4
[mysqld]
#设置3306端口
port=3306
#允许最大连接数
max_connections=200
#允许连接失败的次数
max_connect_errors=10
#默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=UTF8MB4
#开启查询缓存
explicit_defaults_for_timestamp=true
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#等待超时时间秒
wait_timeout=60
#交互式连接超时时间秒
interactive-timeout=600
4.4 创建并运行容器
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-v /home/youwhua/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /home/youwhua/mysql/data:/var/lib/mysql \
-d mysql:8.0
4.4.1 挂载数据存储目录
-v /home/youwhua/mysql/data:/var/lib/mysql \
4.4.2 挂载配置目录
-v /home/youwhua/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
# 或
-v /home/youwhua/mysql/conf/my.cnf:/etc/mysql/mydwl.conf.d/my.cnf \
4.4.3 设置Mysql密码
-e MYSQL_ROOT_PASSWORD=root \
5 数据卷挂载与目录挂载
- 数据卷挂载耦合度低,由docker管理,但是目录较深,不好找
- 目录挂载耦合度高,需要自己管理目录,但目录容易寻找查看
最后
以上是学习 黑马程序员《微服务技术全栈教程》的学习笔记