docker
- docker的核心要素:镜像,容器,仓库
- top,restart后的容器,或者commit后的镜像启动环境变量需要重新加载
docker一键安装
curl -fsSL https://get.docker.com | bash -s docker --mirror aliyun
docker加速器配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://imuqkqpu.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker基本命令
systemctl start docker
启动dockersystemctl stop docker
停止dockersystemctl restart docker
重启dockersystemctl status docker
重启dockerdocker info
查看docker的系统信息
docker常用命令
docker pull ***:***
下载docker镜像docker images
查看所有docekr中的镜像docker run [-d] [-p] 镜像ID/名称
-d
表示后台运行
-p 8080:8080
表示映射端口,宿主机端口:docker容器端口
-v
容器挂载,主机目录:容器目录
docker ps [-a]
显示所有容器的信息(启动和没有启动的)docker exec -it 容器id bash
docker start 容器id
开启已经关闭的容器docker stop 容器id
关闭已经开启的容器docker rmi [-f] 镜像id/镜像名称
删除镜像
-f
表示强制删除镜像,(之前启动过的容器没有删除会提示删除失败,加f会强制删除)docker rm 容器id/容器名称
删除容器docker inspect 容器id
查看容器的更多信息docker cp 容器id:容器内路径 主机目的路径
将容器内文件拷贝到宿主机docker cp 主机目的路径 容器id:容器内路径
将宿主机内文件拷贝到容器
docker进阶命令
docker commit -a "作者" -m "提示信息" 容器id 自定义名:版本号
docker提交新的镜像docker stop $(docker ps -a -q)
停止所有的容器docker rm $(docker ps -a -q)
删除所有容器docker stop $(docker ps -q) & docker rm -f $(docker ps -aq)
一条命令实现停用并删除所欲容器docker rmi $(docker images -q)
删除所有的镜像(谨慎使用)
mysql配置各类软件
安装mysql
docker run -d -p 3306:3306 --name my_mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
启动mysql容器docker exec -it mysqlserver bash
进入mysql容器mysql -uroot -p
登陆mysql- 开启远程访问权限
use mysql;
select host,user from user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
mysql主从同步设置
新建目录和配置文件
-
mkdir -pv /home/mysql/master/conf
-
mkdir -pv /home/mysql/master/data
-
在conf目录下新建my.cnf
-
[mysqld] server_id = 1 log-bin= mysql-bin read-only=0 replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema ###引用默认配置 !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
-
需要忽略指定库或者指定表
-
binlog-ignore-db = test (主从同步时忽略test库)[忽略库的字段] binlog-do-db = test (需要同步的数据库,不在内的不同步) replicate-wild-do-table=db_name.% (只复制哪个库的哪个表,格式:库名.表名) replicate-wild-ignore-table=mysql.% (忽略哪个库的哪个表,格式:库名.表名)
创建master主容器
-
docker run --name master-mysql -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/master/data:/var/lib/mysql -v /home/mysql/master/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7.34
-
进入master主容器
docker exec -it master-mysql bash
-
进入msyql
mysql -u root -p
创建一个只能进行主从同步的账户
-
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456'; 这里表示创建一个slaver同步账号backup,允许访问的IP地址为%,%表示通配符 或者使用 GRANT REPLICATION SLAVE ON *.* to 'backup'@'172.17.0.%' identified by '123456'; 表示只有172.17.0的网段可以访问
-
查看状态,记住File、Position的值,在Slave中将用到
mysql> show master status\G; *************************** 1. row *************************** File: mysql-bin.000003 Position: 439 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec) ERROR: No query specified
配置从服务器(slave)
-
建立主服务的配置目录,用于存放配置
mkdir -pv /home/mysql/slave/conf
-
建立从服务器的数据存储目录
mkdir -pv /home/mysql/slave/data
-
配置目录下增加my.cnf配置
[mysqld] server_id = 2 log-bin= mysql-bin read-only=0 replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema ###引用默认配置 !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
-
创建slave从容器
docker run --name slave-mysql -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/slave/data:/var/lib/mysql -v /home/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7.34
-
进入master主容器
docker exec -it slave-mysql bash
-
进入msyql
mysql -u root -p
-
和主服务建立连接
change master to master_host='172.17.0.2',master_user='backup',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=0,master_port=3306; 注意: master_host 可以通过 docker inspect XXX(容器名或者id) 获取。这里连接的是主服务,所有XXX是mastermysql. 或者用 docker inspect mastermysql |grep ‘IPAddress’ master_user 在主库创建的用户 master_password 用户密码 master_log_file 通过在主服务 show master status\G; 获取 master_port 主服务对外提供的对口号
-
启动从服务同步
start slave;
-
查看从服务状态
show slave status\G;
说明:
Slave_IO_State: Waiting for master to send event ,表示成功了。Connecting to master 多半是连接不通
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如何上面3个状态都正常,那么就是没有问题了。
docker run 命令
docker自定义jdk镜像
-
新建
Dockerfile
文件FROM centos:7 MAINTAINER suren ADD jdk-8u121-linux-x64.tar.gz /usr/local ENV JAVA_HOME /usr/local/jdk1.8.0_121 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $PATH:$JAVA_HOME/bin CMD java -version
-
构建镜像:
docker build -t suren_jdk1.8.0_121 .
-
运行镜像:
docker run -d ac84bde53958
docker自定义springboot项目
-
新建
Dockerfile
文件FROM suren_jdk1.8.0_121 MAINTAINER suren ADD springboot-web-1.0.0.jar /opt RUN chmod +x /opt/springboot-web-1.0.0.jar CMD java -jar /opt/springboot-web-1.0.0.jar
-
构建镜像:
docker build -t springboot-web-jar .
-
运行镜像:
docker run -d -p 18080:18080 ac84bde53958