curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker 加入开机启动
https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11ypk1M9
cat > /etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg EOF
yum install docker
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
下载需要的版本 本地安装
docker-ce-17.03
docker-ce-selinux-17.03
yum -y install *
参考 https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11lCPwMu
yum install -y yum-utils device-mapper-persistent-data lvm2 # docker 依赖
# 阿里云代理
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum update -y && yum install -y docker-ce
systemctl start docker
systemctl enable docker 加入开机启动
## 创建 /etc/docker 目录mkdir /etc/docker
# 配置 daemon.
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file","log-opts": {"max-size": "100m" }
}
EOF
mkdir-p /etc/systemd/system/docker.service.d
# 重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docke
`yum -y install iptables-services`
systemctl start iptables
systemctl enable iptables // 开机自起
iptables -F 清空默认规则
service iptables save 保存默认规则
docker cp a.txt 30026605dcfe:/root
docker cp 30026605dcfe:/root/a.txt /tmp/
docker run --name liuqt -t -i -d ubuntu:14.04 /bin/bash
docker export 7691a814370e > ubuntu.tar
docker import - test/ubuntu:v1.0
docker save -o xxx.tar unutu:v3
dokcer load -i xxx.tar
docker commit id tag:1.0
docker run --link可以用来链接2个容器,使得
源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,
例如:
docker run -d --name selenium_hub selenium/hub
docker run -d --name node --link selenium_hub:hub selenium/node-chrome-debug
--link的格式
--link :alias
其中,name和id是源容器的name和id,alias是源容器在link下的别名。
会在/etc/hosts写入规则
源容器和接收容器之间传递数据是通过以下2种方式
1. 设置环境变量(env | grep -i alias)
1.1docker会在接收容器中设置名为_NAME的环境变量,
该环境变量的值为:_NAME=/接收容器名/源容器alias
例如: node容器下面 HUB_NAME=/node/hub
1.2 docker还会在接收容器中创建关于源容器暴露的端口号的环境变量
PORT_
表示链接的源容器alias
是源容器暴露的端口号
是通信协议:TCP or UDP
例如 node容器中 HUB_PORT_4444_TCP_PROTO
1.3 docker还在接收容器中创建1个名为_PORT的环境变量,
值为源容器的URL:源容器暴露的端口号中最小的那个端口号。
例如:node容器中 HUB_PORT=tcp://172.17.0.2:4444
1.5官方建议使用/etc/hosts来解决重启环境变量失效的问题
2. 更新/etc/hosts文件
docker会将源容器的host更新到目标容器的/etc/hosts
// 自定义bridge网络
docker network create link-network
docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" link-network
// redis
docker run -d --network link-network --network-alias redis redis:latest
// mysql
docker run -d --network link-network --network-alias mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
// app
docker run -it --network link-network magic:v1 /bin/bash
// app配置文件通信方式 mysql redis 使用的是内置dns通信
mysql = root:123456@(mysql)/magic-garden?parseTime=True&loc=Local
redis = redis:6379
// 打包成镜像
docker commit ID/NAME xxx:1.0 // 备份 不会将里面的启动项保存
docker build -t liuqt:v1.0 . // -t 打上标签 当前目录需要有DockerFile
docker tag NAME:tag 自建仓库地址:8888/NAME:1.0
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
服务端
1. docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always registry
// registry 使用的是官方镜像
// // 官方默认是443 需要手动加上对5000的认证
2. 在该台机器上执行 vim /etc/docker/demon.json
添加 {"insecure-registries":["上面仓库的ip:5000"]}
systemctl restart docker
客户端
1. 打包上传
docker tag NAME:tag 自建仓库地址:5000/NAME:1.0 // 修改标签
docker push 自建仓库地址:5000/NAME:1.0 //上传
curl -XGET http://自建仓库地址:5000/v2/_atalog // 查看镜像列表
2. 该台机器同样需要上面的认证
docker run --name mysql11 --net=xxx -d mysql:5.7
--net 指定容器的网络模式
bridge // 默认模式
-p 暴露端口
-p :
-p ::
none // 没有网络模式 比如说用来做计算的容器
container // 容器会加入到其它容器的 network namespace
host // 容器使用Host的网络,没有自己独立的网络栈,端口直接暴露出去,不安全
使用不同的网桥
docker network create -d bridge n1
docker network create -d bridge n2
想让隔离的容器可以通信
将主机的/data/mysql 目录 与容器/绑定 -v可以加多个
docker run --name mysql11 -v /data/mysql/:/ -d mysql:5.7
docker run --name mysql22 -v /data/mysql/:/ -d mysql:5.7
// 限制内存在256m
docker run --name stress -it --rm -m 256 mlorel/docker-stress-ng:lateststress -vm2
// 限制使用n核cpu // 用48核cpu的服务器跑了30核
docker run --name stress -it --rm lorel/docker-stress-ng:latest --cpu 30
// 限制使用0号cpu
docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:lateststress --cpu8
yum install mysql mysql-server
service mysqld start
chkconfig mysqld on
mysqladmin -u root password 123456
docker search mysql
第一个
docker pull mysql:5.7 // mysql 5.7版本
docker run --name mysql_docker -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Liuqt12345678**__QQ -p 3306:3306 -d mysql:5.7
--name 起个名字
-e 注入环境变量
--restart always
-v 持久化存储
导出所有表
$ docker exec mysql_docker sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
导入sql
docker exec -i mysql_docker sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
通信
docker run --name mywordpress --link mysql_docker:mysql -p 3306:3306 -d wordpress
参考 :https://blog.csdn.net/belvine/article/details/89553972