运维之路 第六期

第六期

目标

    • 第六期
    • 1.安装docker
    • 2.启动Docker和验证是否安装成功
    • 3.设置Docker开机启动
    • 4.安装Docker加速器
    • 5.ubantu和kylin安装docker
    • 6.搜索mysql镜像
    • 7.拉取mysql镜像到本地
    • 8.mysql容器本地数据卷规划(conf, logs, data)等规划
    • 9.运行mysql容器(加载数据卷到本地)
    • 10.停止mysql容器
    • 11.连接到mysql容器
    • 12.改变mysql镜像端口号
    • 13.开机自动启动容器
    • 14.删除容器
    • 15.删除镜像
    • 16.Nginx镜像配置
    • 17.Docker Compose 基础
    • 18.Docker Compose 启动 Nginx和mysql
    • 参考文档

1.安装docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker
可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

  1. rpm -qa|grep docker检查是否有安装,有默认安装的话先卸载
    yum remove docker docker-common docker-selinux docker-engine
  2. yum install docker-ce安装docker
    报错运维之路 第六期_第1张图片
    看来目前源中没有
    ubantu或kylin同样不能直接安装
  3. yum install -y yum-utils device-mapper-persistent-data lvm2安装docker需要的依赖
  4. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo添加阿里源(如果已经添加可能会安装失败,可以删除这个源后再安装)
  5. yum makecache fast更新索引
  6. yum install -y docker-ce安装docker
  7. systemctl start docker启动docker
  8. docker info验证是否安装成功
    运维之路 第六期_第2张图片

2.启动Docker和验证是否安装成功

相关指令操作
1、启动docker:# systemctl start docker
2、停止docker:# systemctl stop docker
3、查看docker状态:# systemctl status docker
4、开机自启动:# systemctl enable docker
5、取消开机自启动:# systemctl disable docker
6、查看docker概要信息:# docker info
运维之路 第六期_第3张图片

3.设置Docker开机启动

systemctl enable docker

4.安装Docker加速器

  • vi /etc/docker/daemon.json
  • 修改配置如下:
    {
    “registry-mirrors”: [“https://te3tcj96.mirror.aliyuncs.com”]
    }
    配置阿里云的加速器需要用到阿里云的账号哦
    如果阿里云的用不了(我就用不了。。。。。),建议使用daocloud的,不过要注册后才能使用
    运维之路 第六期_第4张图片
    运维之路 第六期_第5张图片
  • systemctl daemon-reload | systemctl restart docker重启docker
  • docker pull busybox拉去一下测试速度
  • docker run busybox echo “hello world”
    在这里插入图片描述
    看到以上信息表示加速器配置成功!(^-^)V

这里有几个其它的加速器,只要替换上面的地址即可
网易加速器:http://hub-mirror.c.163.com
官方中国加速器:https://registry.docker-cn.com
ustc的镜像:https://docker.mirrors.ustc.edu.cn
daocloud:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)

5.ubantu和kylin安装docker

  • apt-get remove docker docker-engine docker-ce docker.io删除默认安装的docker
  • apt-get update更新 apt 包索引。
    apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common安装 apt 依赖包
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -添加Docker官方的GPG密钥
  • apt-key fingerprint 0EBFCD88验证您现在是否拥有带有指纹的密钥
  • add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"设置稳定版仓库
  • apt-get update再次更新索引包
  • apt-get install docker docker-compose docker-containerd docker-doc docker-runc docker.io安装最新版本的 Docker Engine-Community 和 containerd
  • 可能会遇到报错,运行apt --fix-broken install可解决
  • systemctl start docker
  • docker info验证是否安装成功
  • systemctl enable docker开机自启

6.搜索mysql镜像

docker search mysql查找镜像(建议直接装mariadb)

7.拉取mysql镜像到本地

docker pull mysql:5.7
配置阿里云镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://te3tcj96.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

结果一直报超时,不管用阿里的加速器,中科大,网易或者daocloud的都不行,搞了好久,还改了hosts文件什么的,都不行。。。。。。
众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。
直接去阿里云镜像服务搜,mysql就行,然后直接运行你搜出来的公网地址
docker pull registry.cn-shenzhen.aliyuncs.com/mysql-55-rhel7/mysql
搞定o(╥﹏╥)o
运维之路 第六期_第6张图片
运维之路 第六期_第7张图片

8.mysql容器本地数据卷规划(conf, logs, data)等规划

  1. 运行mysql
docker run --name mysql -p 3306:3306 \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mariadb

–name:容器名,此处命名为mysql
-e:配置信息,此处配置mysql的root用户的登陆密码
-v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
-p:端口映射,此处映射 主机3306端口 到 容器的3306端口
-d:源镜像名,此处为docker images后的容器名
在这里插入图片描述

  1. 但是,一运行就直接退出了,估计在arm架构下这东西运行不了,那就用mariadb代替吧
  2. docker pull mariadb(异常顺利)
  3. 启动mariadb
docker run --name mariadb -p 3306:3306 \
-v /usr/local/docker/mariadb/conf:/etc/mariadb \
-v /usr/local/docker/mariadb/logs:/var/log/mariadb \
-v /usr/local/docker/mariadb/data:/var/lib/mariadb \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mariadb
  1. docker ps -a
    运维之路 第六期_第8张图片
    启动成功o(╥﹏╥)o

9.运行mysql容器(加载数据卷到本地)

  1. firewall-cmd --add-port=3306/tcp --permanent添加3306端口到防火墙可通行
  2. firewall-cmd --reload保存
  3. 上一步中的几个-v指令就是指定存放的本地文件

10.停止mysql容器

  1. docker ps -a获取mariadb的容器id
  2. docker stop [容器id]

11.连接到mysql容器

  1. docker exec -it mariadb /bin/bash
root@b683296cd91e:/# mysql -uroot -p
Enter password: 

12.改变mysql镜像端口号

  1. systemctl stop docker
  2. cd /var/lib/docker/containers/
  3. docker ps -a根据容器id找到对应的文件夹
  4. cd b683296cd91e249d73a3c5a697e9fd89bfde073099bf8b48fdac94b6531f0b13
  5. vim hostconfig.json
    运维之路 第六期_第9张图片
    3306/tcp是容器端口, HostPort是宿主机端口(映射端口)
  6. systemctl start docker
  7. docker ps -a进行验证
    在这里插入图片描述

13.开机自动启动容器

  1. systemctl enable docker开机启动docker
  2. docker container update --restart=always 容器id开启docker自启动容器

14.删除容器

  1. docker ps -a获取要删除容器的容器ID
  2. docker rm [容器ID]

15.删除镜像

docker rmi 镜像名

16.Nginx镜像配置

  1. docker pull nginx
  2. firewall-cmd --add-port=8080/tcp --permanent添加8080端口到防火墙可通行
  3. firewall-cmd --reload保存
  4. docker run --name nginx -p 8080:80 -v /usr/local/docker/nginx/conf:/etc/nginx/conf.d -v /usr/local/docker/nginx/html:/usr/share/nginx/html -v /usr/local/docker/nginx/log:/var/log/nginx -d nginx将容器nginx80端口映射到本地8080端口
  5. docker ps -a查看nginx状态是否运行成功
    运维之路 第六期_第10张图片
  6. 如果碰到一下错误
root@Kylin:/etc/nginx/sites-available# docker run --name nginx -p 8080:80 -d nginx
4623e78efcc9cbf7b5067351cdd163751b3ab03a79d853873d5b6cc7b0210f7e
docker: Error response from daemon: driver failed programming external connectivity on endpoint nginx (52fe75b992e0bf95397f35b07fc8db84e59399937d4c4459b1990a1e6f135970):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.18.0.3:80 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)).

systemctl restart docker重启docker就好

17.Docker Compose 基础

前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知
使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具

  1. yum install -y docker-compose
  2. cd /usr/local/docker-compose
  3. docker-compose -v验证是否安装成功
    在这里插入图片描述

18.Docker Compose 启动 Nginx和mysql

  1. cd /usr/local/docker-compose进入配置目录
  2. touch docker-compose.yml创建yml
  3. vim docker-compose.yml编辑yml
  4. 反正我在这折腾了很久,yml的格式还有执行顺序是真的让人崩溃,以下是正确格式
version: '2'
services:
  nginx:
    image: nginx
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./nginx/conf:/etc/nginx/conf
      - ./nginx/log:/var/log/nginx
      - ./nginx/www:/var/www
      - ./nginx/web:/usr/share/nginx/html
  mysql:
     network_mode: "bridge"
     environment:
       MYSQL_ROOT_PASSWORD: "123456"
       MYSQL_USER: 'test'
       MYSQL_PASS: '123456'
     image: "mariadb"
     restart: "always"
     volumes:
     - "./mysql/db:/var/lib/mysql"
     - "./mysql/conf/my.cnf:/etc/my.cnf"
     - "./mysql/init:/docker-entrypoint-initdb.d/"
     ports:
     - "3306:3306"

总结一下:

  • key值后面的冒号必须加空格会转译对象,不加空格则会转译为字符串
  • image值要写在第一个
  • volumes的值是一个数据,但数组里面的元素是字符串类型
  • 必须加版本号
  • 推荐一个在线查看yml格式的网站
  1. docker-compose up -d运行
  2. docker-compose ps查看状态
[root@c76-ci-qga docker-compose]# docker-compose ps
        Name                      Command             State           Ports         
------------------------------------------------------------------------------------
dockercompose_mysql_1   docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp
dockercompose_nginx_1   nginx -g daemon off;          Up      0.0.0.0:8080->80/tcp  
  1. 在./nginx/www创建自己的index.html然后就能访问啦

参考文档

https://www.cnblogs.com/sablier/p/11605606.html

你可能感兴趣的:(运维,linux,ubuntu,centos,运维,docker)