Docker学习+基于Docker MySQL的主从复制

1.Docker学习

1.容器操作:

1.查看dokcer信息或版本
 docker info 
 docker -v
2.获取docker所有命令
 docker help
 获取命令的参数
 man docker-命令
 eg:获取 docker run 命令的所有参数
    man docker-run  
3.基于docker镜像运行容器
 docker run -i -t --name 容器名 image:tag 程序
 -i 表示以交互方式运行容器
 -t 表示告诉docker为要创建的容器分配一个ty伪终端
 --name 指定创建的容器名,如果无此参数,docker将生成随机的容器名
 eg: 运行最新版本ubuntu的bash/shell程序
    docker run -i -t ubuntu /bin/bash
4.重启停止的容器
 docker start [-i] 容器名|容器id
 -i 表示以交互方式重启
 
 附着到容器上 
 docker attach 容器名|容器id
 
 停止运行的容器
 docker stop 容器名|容器id
 查看运行的容器
 docker ps
 查看所有容器
 docker ps -a

5.后台启动容器  --- 创建守护式容器
 docker run --name 容器名 -d  镜像名 程序
 -d 参数表示 docker将会把容器放到后台运行,仅返回一个后台运行的容器id
 eg:在基于ubuntu镜像创建的容器111中,运行程序,每秒输出一个 hello docker,直到容器停止
   docker run --name 111 -d ubuntu /bin/sh -c "while true; do echo hello docker; sleep 1; done"
 
6.删除所有exited状态的容器
 docker rm $(docker ps -q -f status=exited)
 说明:
     docker ps -a -f status=exited   查询所有状态是exited的容器
     docker ps -q -f status=exited   查询所有状态是exited的容器的id

7.查看容器运行日志
 docker logs 容器名 | 容器id       打印所有容器运行日志  
 docker logs -f 容器名 | 容器id    类似  tail -f 动态打印容器运行日志
 docker logs --tail lines -f 容器名 | 容器id    类似 tail -f --lines  从最后lines行开始,动态打印容器运行日志
 
 Ctrl + C 退出日志跟踪
 
8.容器内的进程
 查看容器内的进程
 docker top 容器名 | 容器id
 在容器内部运行进程
 docker exec -d 容器名 | 容器id 运行的进程
 说明:
     docker exec 可以在正在运行的容器中进行维护、监控及管理任务
          eg1:
             后台启动一个Tomcat容器
             docker run -d --name tom1 tomcat
             查看tom1容器内的进程
             docker top tom1
             在tom1容器中创建一个文件
             docker exec -d tom1 touch /ect/test.tom1
          eg2:
             在tom1容器中启动一个打开shell的交互任务    ---  进入运行时容器的一种方式
             docker exec -it tom1 /bin/bash   
             在tom1容器中创建一个文件夹
             docker exec -d tom1 mkdir /tom1
        
        9.自动重启容器
          --restart标志,让docker自动重新启动容器, --restart标志会检查容器的退出代码,并以此决定是否要重启容器,Docker默认不会重启  
          docker run --restart=always --name test1 -d ubuntu /bin/sh -c "while true; do echo hello docker; sleep 1; done"
          解析:
               --restart=always  无论容器的退出代码是什么,Docker都还自动重启容器
               --restart=on-failure:5  当容器退出代码为非0时,Docker会尝试自动重启容器,最多重启5次
         
        10.深入容器
           docker inspect 容器名 | 容器id    查看容器详细信息,对容器进行详细检查,返回其配置信息(名称、命令、网络配置等数据)
        
        11.删除容器   --- 必须先停止容器(stop 或 kill)
           docker rm 容器名 | 容器id
           一次性删除所有容器
           docker rm $(docker ps -a -q)
                 
        12.2个有用的docker容器操作命令:
        
            1.删除所有已停止的容器
              docker rm $(docker ps -q -f status=exited)
            2.进入后台运行的容器
              docker exec -it 容器名 /bin/bash
              docker attach 容器名
  
2.镜像操作
1.镜像:文件系统的叠加,最底层是引导文件系统,建立在宿主机内核之上。
      一个镜像可以放到另一个镜像的顶部,位于下面的镜像称为父镜像,以此类推,直到最底部的镜像称为基础镜像
      当从一个镜像启动容器时,Docker会在该镜像的最顶层夹杂一个读写文件系统,运行的程序就在这个读写层中执行
      当Docker第一次启动一个容器时,初始的读写层是空的,当文件系统发生变化时,这些变化都会应用到这一层上,
      eg:
         如果想修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层,该文件的只读版本依然存在,但已经被读写层还总的该文件副本所隐藏
      
        可写容器
          |
        Tomcat镜像
                   |
                 Ubuntu镜像
                   |
                 引导文件系统
                   |
                 宿主机内核
        2.镜像仓库   docker官方
             docker search 镜像    查询镜像
             docker images        列出本地所有镜像
             docker pull image:tag  拉取镜像,如果没有tag,默认拉取image镜像的最新版本 image:latest
        
        3.构建镜像  Dockerfile文件 + docker build 命令
             1.创建docker hub帐号
             2.docker login 登录
             3.通过Dockerfile创建镜像
               eg:创建一个nginx的基础镜像
                  mkdir static_web
                  cd static_web
                  touch Dockerfile
                  编辑Dockerfile内容如下:
                    #Version: 0.0.1
FROM ubuntu:14.04
MAINTAINER Jay He jayhe@jayhe.com
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi, I am in your container ' > /usr/shar/nginx/html/index.html
EXPOSE 80
 
            4.基于Dockerfile文件创建镜像
              docker build -t="author/image_name:tag" .
              解析:
                  -t  为新镜像设置了仓库和名称:版本标签  , 如果没有指定tag,Docker默认设置为latest标签
                  .   最后的 . 告诉 Docker到本地目录中去找Dockerfile文件,
                      也可通过一个git仓库的地址来指定Dockerfile位置
                      eg:
                         docker build -t="jay/static_web:v1" git@github.com:xx/docker-static_web
                         
            5.从新镜像启动容器
              docker run -d -p 80 --name static_web jay/static_web:v1 nginx -g "daemon off"
              解析:
                  后台启动(适合nginx这样长时间运行的守护进程)一个名为static_web的容器,
                  同时指定了需要在容器中运行的命令:nginx -g "daemon off" (以前台运行方式启动Nginx,作为我们的Web服务器)   
                  -p 随机指定一个宿主机port映射到容器中的80端口
                     -p port1:port     将容器的port端口,映射到宿主机的port1端口
                     
            6.Docker指令
                  Dockerfile结构:
    FROM 基础镜像  第一条指令                  
                     MAINTAINER  xx  作者信息
                     RUN  xx     RUN指令会在当前镜像中运行指定的命令,这里通过RUN指令安装nginx包,然后创建一个index.html文件
                     EXPOST port 指定对外的端口


                  CMD 
                               指定一个容器启动时要运行的命令, 指令会被docker run 命令行 参数 覆盖
                               类似RUN指令,但:
                                      RUN指令时指定镜像被构建时要运行的命令,
                                      CMD 指定容器被启动时要运行的命令,类似 docker run 启动容器时,指定要运行的命令
                                      eg:
                                         docker run -it jay/static_web /bin/true
                                         <==>
                                         CMD ["bin/true"]
                                      eg:为要运行的命令指定参数   ---  容器启动时,列出所有文件
                                         CMD ["/bin/bash", "-l"]
                              注意:
                                  1.docker run 命令 会覆盖  CMD指令
                                  2.指定了多条CMD指令,只会执行最后一条
                              
                  ENTRYPOINT
                            指定一个容器启动时要运行的命令, 指令不会被docker run 命令覆盖,
                            docker run 命令行中指定的参数都会被当作参数再次传递给 ENTRYPOINT指令中指定命令
                            -build 参数  命令 覆盖配置
                   
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于DockerMySQL主从数据库配置需要完成以下步骤: 1. 启动Master(主)容器:使用命令`docker run -p 3306:3306 --name main_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为main_mysql,密码为123456。 2. 连接到Master(主)容器:使用命令`docker exec -it main_mysql bash`进入Master(主)容器的命令行界面。 3. 配置Master(主):在Master(主)容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Master(主)容器的IP地址。 4. 重启Master(主)容器:使用命令`docker restart main_mysql`重启Master(主)容器使配置生效。 5. 启动Slave(从)容器:使用命令`docker run -p 3340:3306 --name slave_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为slave_mysql,密码为123456。 6. 连接到Slave(从)容器:使用命令`docker exec -it slave_mysql bash`进入Slave(从)容器的命令行界面。 7. 配置Slave(从):在Slave(从)容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Slave(从)容器的IP地址,并添加以下配置: ``` server-id = 2 relay-log = /var/lib/mysql/mysql-relay-bin relay-log-index = /var/lib/mysql/mysql-relay-bin.index log_slave_updates = 1 ``` 8. 重启Slave(从)容器:使用命令`docker restart slave_mysql`重启Slave(从)容器使配置生效。 9. 在Slave(从)容器内部执行以下命令连接到Master(主)容器并设置复制: ``` CHANGE MASTER TO MASTER_HOST='<Master(主)容器的IP地址>', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; ``` 10. 启动复制:在Slave(从)容器内部执行命令`START SLAVE;`启动主从复制。 11. 检查主从复制状态:在Slave(从)容器内部执行命令`SHOW SLAVE STATUS\G;`,确保"Slave_IO_Running"和"Slave_SQL_Running"都为"YES",表示主从复制已成功配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值