【学习笔记】Docker(一)

Docker为什么会出现?

问题:环境配置最初开发上线都需要配置,并且非常麻烦。每一个机器都需要部署环境——费时费力、我在我的电脑上可以运行、版本更新,导致服务不可用

传统:开发打包jar包交给运维来做

现在:开发打包部署上线,一套流程做完

手机软件:java --apk --发布(手机商店)--用户下载apk --使用

系统项目:java --jar(环境) --Docker --下载我们发布的镜像 --直接使用

什么是容器?

容器是计算机上的沙盒进程,与主机上的所有其他进程隔离,这种隔离利用内核命名空间和cgroups。

容器特点:

  1. 是图像的可运行实例,可以受用DockerAPI或CLI创建、启动、停止、移动和删除容器

  1. 可以在本地计算机、虚拟机上运行或部署到云上

  1. 是可移植的

  1. 与其他容器隔离,并运行自己的软件、二进制文件和配置

什么是容器映像?

运行容器时使用隔离的文件系统由容器映像提供,由于映像包含容器的文件系统,因此它必须包含运行应用程序所需的一切-所有依赖项、配置、脚本、二进制文件等。该映像还包含容器的其他配置,例如环境变量、要运行的默认命令和其他元数据

Docker基本命令

  1. docker pull [options] NAME [:TAG] => 将远程仓库拉取镜像到本地

[options]:拉取的一些参数

[:TAG]:可选,如果不选默认最新版本,选填指定版本

NAME:镜像的名称

  1. docker images [options] [REPOSITORY[:TAG]] => 查看本地镜像

[options]:拉取的一些参数

  1. docker run [options] IMAGE[:TAG] [COMMAND] [ARG..] =>把镜像运行起来成为容器

[IMAGE]:镜像的名字

[COMMAND]:运行起来的时候要执行什么命令

[ARG]:表示这条命令运行需要的参数

Docker拉取MySQL镜像并运行

  1. 拉取MySQL镜像docker pull mysql:8.0.26

  1. docker run -p 3306:3306 --name mysql --privileged=true

-v /mydata/mysql/log:/var/log/mysql

-v /mydata/mysql/data:/var/lib/mysql

-v /mydata/mysql/conf:/etc/mysql/conf.d

-e MYSQL_ROOT_PASSWORD=root

-d mysql:8.0.26

-p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口

-v /root/mysql/logs:/logs:将主机目录(/root/mysql)下的 logs 目录挂载到容器中的

/logs 日志目录

-v /root/mysql/data:/var/lib/mysql :将宿主机目录(/root/mysql)下的data目录挂载到容

器的 /var/lib/mysql 数据目录

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码

使用拉取的镜像启动成容器,一个镜像可以启动多个容器,每一次启动容器会自动保存,下次启动容器可以使用docker ps -a查看之前启动过的容器,使用命令docker start [容器id]进行启动

3.查看正在运行的容器:docker ps (-a可以查看已关闭的容器)

4.进入容器:docker exec -it mysql /bin/bash

运行问题如下:

问题一:Error response from daemon: Container xxx is restarting, wait until the container is running

当执行进入mysql容器命令时,出现容器正在重启需要等待容器运行完成,但是会发现一直在报错,一直处于重启中

使用docker log 容器id查看该容器运行的日志

发现挂载权限失败,容器并没有运行起来,因为虚拟机系统是centos7版本,而centos7的安全Selinux禁止了一些安全权限,导致挂载信息时权限不足。

解决方案为:在将镜像变成容器时,应该加入-privileged=true加上特定权限

docker run -p 3306:3306 --name mysql --privileged=true

-v /mydata/mysql/log:/var/log/mysql

-v /mydata/mysql/data:/var/lib/mysql

-v /mydata/mysql/conf:/etc/mysql/conf.d

-e MYSQL_ROOT_PASSWORD=root

-d mysql:8.0.26

(3条消息) chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied_mischen520的博客-CSDN博客

问题二:外部Windows连接不上Docker中的MySQL

  1. 首先确认容器是否启动docker ps

  1. 进入容器docker exec -it mysql /bin/bash

  1. 进入mysql:mysql -uroot -p

  1. 非本机ip访问mysql则需要修改密码:

use mysql;

alter user 'root'@'%' identified with mysql_native_password by '123456';

flush privileges;

select host,user,plugin,authentication_string from mysql.user;

再次远程连接,问题解决

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值