docker 自学笔记
一、docker 安装
1、mac下安装
brew install docker
2、docker配置
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"insecure-registries": [
"127.0.0.1:5000"
],
"registry-mirrors": [
"https://dfggrvdfvdf.mirror.aliyuncs.com"
]
}
二、容器三要素
容器,镜像,仓库
三、ubuntu 安装
1、拉镜像
docker pull ubuntu
2、使用镜像创建ubuntu容器
docker run -it --name=mylinux -d ubuntu /bin/bash
3、查看运行的所有容器
docker ps -a
4、进入容器交互终端
docker exec -it mylinux /bin/bash
5、强制删除容器
docker rm -f mylinux
6、停止容器
docker stop mylinux
7、删除容器
docker rm mylinux
8、查看容器的进程
docker top mylinux
9、将容器的内容拷贝到宿主机
docker cp 00293c6120d5:/home/a.txt /tmp/
10、将容器被导出
docker export 00293c6120d5 > abc.tar
11、将容器导出镜像
cat abc.tar| docker import - lft/ubuntu:3.9
12、还原容器
docker run -it --name=newlinux -d a97f0637883b /bin/bash
13、提交容器副本
docker commit -m="new linux image" -a="zhangsan" 8ab3fe9feda7 newubuntu:1.8
14、启动新生成的镜像
docker run -it --name=mylinux -d 9bb4ce12c704 /bin/bash
注意⚠️
docker exec 不会退出容器
docker attach 会退出容器
四、私有库搭建
1、docker pull registry
2、docker run -d --name registry -p 5000:5000 -v /tmp/docker/registry:/tmp/registry registry
3、docker tag hello:v1 127.0.0.1:5000/hello:v1
4、配置daemon.json并重启docker
{
"insecure-registries" : [ "your-server-ip:5000" ]
}
5、推送到私有库
docker push 127.0.0.1:5000/hello:v1
6、拉取镜像
docker pull 127.0.0.1:5000/hello:v1
7、跑起来
docker run -it --name hello -p 8080:8080 -d 127.0.0.1:5000/hello:v1
五、容器卷
1、目录挂载
docker run -it --name mylinux --privileged=true -v /tmp/mylinux/data:/tmp/data ubuntu /bin/bash
六、安装tomcat
docker run -it --name mytomcat -p 8888:8080 -d tomcat:8.0
七、安装mysql
1、简单安装
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:8.0
2、企业级安装
docker run -d -p 3306:3306 --privileged=true \
-v /Users/liufangting/home/mysql/log:/var/log/mysql \
-v /Users/liufangting/home/mysql/data:/var/lib/mysql \
-v /Users/liufangting/home/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql-master \
mysql
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
default-storage-engine=INNODB
3、集群步骤
1)新建mysql主服务
docker run -d -p 3307:3306 --privileged=true \
-v /Users/liufangting/home/mysql/3307/log:/var/log/mysql \
-v /Users/liufangting/home/mysql/3307/data:/var/lib/mysql \
-v /Users/liufangting/home/mysql/3307/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql-master \
mysql:5.7
2)mysql-master的文件配置
3)mysql-master重启
docker restart mysql-master
4)登陆-mysql-master创建从服务账号
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
#给master用户配置复制权限,可访问库为所有,可访问地址为所有
grant replication slave ,replication client on *.* to 'slave'@'%';
5)新建从服务器
docker run -d -p 3308:3306 --privileged=true \
-v /Users/liufangting/home/mysql/3308/log:/var/log/mysql \
-v /Users/liufangting/home/mysql/3308/data:/var/lib/mysql \
-v /Users/liufangting/home/mysql/3308/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql-slave \
mysql:5.7
6)修改mysql-slave文件的配置
[mysqld]
## 设置server ID 同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小
binlog_cache_size=1M
## 设置使用二进制的日志格式
binlog_format=mixed
## 二进制日志过期清理时间
expire_logs_days=7
## 跳过主层复制遇到的错误
slave_skip_errors=1062
## 配置中继日志
reply_log=mall-mysql-repay-bin
##slave 将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读
read_only=1
7)重启mysql-slave
docker restart mysql-slave
8)登陆mysql-master查看同步状态
show master status;
9)从数据库配置主层复制
change master to master_host="172.17.0.2",
master_user="slave",master_password='123456',master_port=3306,
master_log_file='mall-mysql-bin.000001',master_log_pos=1097,
master_connect_retry=30;
show slave status\G;
Slave_IO_Running: No
Slave_SQL_Running: No
10)从数据库开启主从同步
start slave
show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
八、redis 安装
1、拉取镜像
docker pull redis
2、简单安装redis服务
docker run -it --name myredis -d redis
3、企业级安装
docker run -d -p 6379:6379 --privileged=true \
-v /Users/liufangting/home/redis/conf:/usr/local/etc/redis \
-v /Users/liufangting/home/redis/data:/data \
--name myredis redis redis-server /usr/local/etc/redis/redis.conf
九、docker自定义网络
1、新建网络
docker network create lft
2、使用自己新建的网络运行容器
docker run -it --name mytomcat -p 8888:8080 --network lft -d tomcat:8.0
docker run -it --name mytomcat2 -p 8889:8080 --network lft -d tomcat:8.0
docker exec -it mytomcat /bin/bash
ping mytomcat2
十、docker-compose 使用
mac桌面版已经安装了docker-compose
1、开发微服务项目
2、配置dockerfile文件生成镜像
3、配置docker-compose文件启动容器
docker-compose up
相当于把多个docker run 一健运行
十一、监控docker容器
docker run -p 9000:9000 -p 8000:8000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /Users/liufangting/home/portainer/data:/data \
-d portainer/portainer
十二、使用docker创建etcd容器
version: '3'
networks:
etcd-network:
services:
etcd:
container_name: "etcd_server"
image: bitnami/etcd:latest
privileged: true
ports:
- "2379:2379"
- "2380:2380"
environment:
- "ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379"
- "ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379"
- "ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380"
- "ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380"
- "ALLOW_NONE_AUTHENTICATION=no"
- "ETCD_ROOT_PASSWORD=123456"
volumes:
- /Users/liufangting/home/etcd3/data:/bitnami/etcd/data
networks:
- etcd-network
etcd_keeper:
hostname: etcdkeeper
container_name: "etcdkeeper"
image: evildecay/etcdkeeper:latest
ports:
- "8099:8080"
networks:
- etcd-network
十三、etcd管理界面
web ui
需要指定etcd服务地址,这里我指定容器名称,因为etcd keeper 和etcd是在同一网络下,所以可以通过
容器名称作为域名,是互相能ping通的
总结
这篇文章主要介绍了docker的安装以及基本命令的使用,后面又通过实例加深大家对docker的理解和运用。