centos上学习docker

要求系统为centos7以上,64位,内核版本高于3.10。

// 安装相关系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

// 添加yum源
sudo yum-config-magger --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

// 更新yum缓存
sudo yum makecache fast

// 安装
sudo yum -y install docker-ce

// 启动
sudo systemctl start docker 或 sudo service docker start

// 设置为开机自启
sudo systemctl enable docker

输入 docker search --filter "is-official=true" nginx 能够搜索到一条nginx的镜像资源代表docker启动成功。

拉取镜像:

// 拉取镜像前设置docker的yum源
cd /etc/docker
vi daemon.json // 1.9版没有该文件 通过vi自动创建
// 写入该配置
// xxx是获取的阿里云加速密钥
// 获取密钥及配置详情访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 点击菜单中镜像加速器选项
{
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
// 然后重启docker
sudo systemctl daemon-reload 
sudo systemctl restart docker

// 拉取Mysql
docker pull mysql:8.0.11
// 查看本地镜像
docker images
// 创建Mysql容器
docker run -d -v /opt/mysql_data_docker/data/mysql/conf/my.cnf:/etc/mysql/my.cnf  -v /opt/mysql_data_docker/data/mysql/data:/var/lib/mysql  -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.11
/*
 *参数解释
 *-d 启动方式 -d: 后台运行容器,并返回容器ID; -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;-i: 以交互模式运行容器,通常与 -t 同时使用;
 *-v 文件挂载 将容器的配置文件与data目录(含数据与日志)与宿主机文件相关联 容器出现后只需创建新容器并挂载相同目录,就能一如既往的提供服务
 *-p 端口映射 将对宿主机端口3306(前)的访问redirect到对容器的3306(后)的访问
 *--name 容器名 可写为--name=container_name 其他参数也可以
 *-e创建时传递的参数 这里用于初始化root用户
 *mysql:8.0.11 使用具体的镜像名
 *ps:--link参数 容器互联 关联指定的目标容器 可以读取目标容器的环境变量 用于对目标容器进行访问 例如很多服务都需要对mysql容器进行访问,在配置文件中如果将MySQL的ip地址写死会限制容器的灵活性,就可以将这个服务与mysql容器关联起来 在配置文件的mysql的ip中写mysql的容器名就行的(我这里就写mysql8:3306)
 */
 // 查看运行中的容器
docker ps //docker ps -a 产看所有容器
// 创建镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
/*
 *OPTIONS说明:
 *-a :提交的镜像作者;
 *-c :使用Dockerfile指令来创建镜像;
 *-m :提交时的说明文字;
 *-p :在commit时,将容器暂停。
 *例 docker commit -a "test.com" -m "my MySQL" ,mysql8 mymysql:v1
 *ps:查看docker inspect container_name命令中的mounts属性包含该容器的挂载信息 创建的镜像在本地    
 */
/*
 *既然有pull、commit那就少不了push
 *先在docker hub官网https://hub.docker.com/注册
 *然后使用docker login登录 登录成功后登录信息为储存在本地 不需要重复登录 和git操作类似
 *然后通过docker push将指定的镜像上传到docker hub
 *在生产环境中 也可以通过docker export将容器(带数据)导出为zip、tar写到存储介质然后在想要的机器上用docker import导入容器
 */

操作容器

// 进入容器 我这里进入mysql8
dokcer exec -it container_name /bin/bash

// 连接mysql
mysql -uroot -p
password:xxxxxx

// mysql 8以上用户密码加密方式、sql模式与5.7及以下有不同 可能导致低版本的Navicat连接不上mysql、带group by的sql语句执行报错
// 修改加密方式
// 本机登录
alter user 'root'@'localhost' identified with mysql_native_password by 'xxxx';
// 非本机登录
alter user 'root'@'%' identified with mysql_native_password by 'xxxx';
// 更新权限信息
flush privileges;
// 修改sql_model
show variables like 'sql_mode'; 或 select @@sql_mode;
// 复制其中sqlmodel值 去掉其中的only_full_group_by 更新该属性 例如我的
set @@sql_mode = `STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION`;// 该语句修改全局配置 之后建的库都生效
set sql_mode = `STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION`;// 之前建的库需要在该库下执行该语句才生效



遇到的问题:

1.开始docker可以search一pull就出错,按网上的修改网卡配置文件ifcfg-xxx:将dhcp关了 设置静态ip应该是我的值没设对导致search都出错,然后该文件还原,网上有的说删除/etc/udev/rules.d/70-persistent-net.rules配置文件 重启机器让它自动选择网卡,我没发现这个文件  自己加了写入

SUBSYSTRM=="net",ACTION=="add",DRIVERS=="?*",ATTR{address}=="00:0c:29:dc:dd:ad",ATTR{type}=="1",KERNEL=="eth*",NAME=="你的网卡配置文件名(去除掉‘ifcfg-’的字符串" 

然后重启机器问题就解决了

进入ifcfg-xxx cd /etc/sysconfig/network-scripts,应该就第一个 有一个ifcfg-lo不是的

2.开始设置了centos的yum源 没设置docker的yum源 导致pull贼慢

3.docker端口映射或启动容器时报错Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen

重启机器就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章