docker
安装docker
#1:卸载旧的docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#2:设置镜像仓库
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo //国外得
修改为阿里云镜像仓库
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //阿里云
#3:更新yum索引
yum makecache fast
#4:安装docker引擎
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
#5:启动 Docker
systemctl start docker
#6:hello-world 通过运行映像来验证 Docker 引擎是否已正确安装
docker run hello-world
#7 查看docker版本信息
docker version
#8 查看docker系统信息
docker info
#9 卸载 Docker Engine、CLI、Containerd 和 Docker Compose 软件包:
yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
基本命令
镜像基本命令
#查看安装得镜像
docker images
#搜索镜像
docker search 镜像名
#安装镜像
docker pull mysql [版本] //不带版本号默认最新
#卸载镜像
docker rmi mysql
#查看镜像的构造过程
docker history
容器基本命令
#运行并启动容器
docker run [可选参数] image
#参数说明
--name="名字" 指定容器名字
-d 后台方式运行 //#docker容器后台运行,必须要有一个前台的进程,否则会自动停止#编写shell脚本循环行得centos容器保持运行状态 docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
(
-p ip:主机端口:容器端口 配置主机端口映射到容器端口
-p 主机端口:容器端口 //docker run -p8080:3306
-p 容器端口
)
-e 环境配置
-P 随机指定端口(大写的P)
#退出容器
exit //停止并退出
ctrl+p+q //后台运行
#查看运行容器
docker ps [可选参数]
#参数说明
-a 全部-n=? # 显示最近创建的n个容器
-q # 只显示容器的编号
#删除容器
docker rm 容器ID //删除容器
docker rm -f $(docker ps -aq) //删除所有容器
#启动、停止容器
docker start 容器ID //启动容器
docker stop 容器ID //停止容器
docker restart 容器ID //重启容器
docker kill 容器ID //强制关闭容器
容器其他命令
#查看日志
dockder logs [可选参数] 容器ID
#查看进程
docker top 容器ID
#查看元数据
docker inspect 容器ID
#进入正在运行的容器
docker exec -it 容器ID /bin/bash
docker attach 容器ID
//docker exec 重新开一个终端 可以在里面操作; docker attach 打开正在运行的终端 不会开启新的进程
#复制容器的内容到主机
docker cp 容器ID:路径 主机路径
提交镜像(容器->镜像)
docker commit -a="制作人" -m="内容" 容器ID 自定义镜像名:版本号
容器数据卷
挂载
docker run -it -v 宿主机目录:容器目录
//俩者为双向绑定,一方改变另一个也改变
#实战:mysql同步数据
docker run -d --name mysqls -v /www/wwwroot/mysql/conf:/etc/mysql/conf.d -v /www/wwwroot/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='密码' mysql
//参数说明
-v (卷挂载)宿主目录:容器目录
-e 环境配置
-name 容器名
-d 后台运行
匿名挂载,居名挂载
docker run -v 容器路径 //匿名挂载
docker run -v 自定义名称:容器路径 //居名挂载
docker run -v 自定义名称:容器路径:rw //居名挂载(读写)
docker run -v 自定义名称:容器路径:ro //居名挂载(只读)
docker volume ls //查看所有卷
数据卷容器
--volumes-form 主容器
//数据为双向复制,没有容器存在后数据才会消失
//示例mysql
docker run -d -p7001:3306 --name mysql01 -v /var/lib/mysql/-v /etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=111111111 mysql
docker run -d -p7002:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=111111111 --volumes-from mysql01 mysql
DockerFile
初识dockerfile
//1,新建命令文件dockerfile1
//命令大写
FROM Centos
VOLUMES ["volume01","volume02"]
CMD ".....end....."
CMD /bin/bash
//2,制作镜像
//-f 命令文件
//-r 镜像名称
docker build -f 宿主路径/dockerfile1 -t 自定义镜像名称 .
//3.生成自定义镜像
基本命令
FORM //基础镜像
MAINTAINER //作者
RUN //运行命令
ADD //添加文件,自动解压压缩包
WORKDIR //工作目录
VOLUME //目录挂载
EXPOSE //开放端口
CMD //指定容器启动时运行的命令,可被替代,最后一个生效
ENTRYPOINT //指定容器启动时运行的命令,追加命令
ONBUILD //当构建一个被继承的DockerFile 会运行
COPY // 类似于ADD
ENV //构建的时候设置环境变量
示例
#centos示例
FROM centos:7 //基础镜像
MAINTAINER duzhili<85096033@qq.com> //作者
ENV MYPATH /usr/local //配置目录
WORKDIR $MYPATH //配置工作目录
RUN yum -y install vim //执行安装vim命令
EXPOSE 80 //端口
CMD echo ".....end...... "
CMD /bin/bash //默认进入的命令行
#php项目示例
1)新建Dockerfile
FROM php
MAINTAINER duzhili<85096033@qq.com>
ADD index.php /var/www
EXPOSE 8080
WORKDIR /var/www
ENTRYPOINT ["php","-S","0.0.0.0:8080"]
2)构建镜像
docker build -t myphp .
3)生成容器
docker run -d -p 8080:8080 --name php1 myphp
4) 访问
curl localhost:7002
//输出hello wold
发布镜像
dockerHub
1,dockerhub注册账号
2,docker login //登录
3,docker push //发布镜像
阿里云镜像服务
Docker 网络
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:16:3e:36:c2:51 brd ff:ff:ff:ff:ff:ff
inet 172.16.141.197/20 brd 172.16.143.255 scope global dynamic noprefixroute eth0
valid_lft 305779831sec preferred_lft 305779831sec
inet6 fe80::216:3eff:fe36:c251/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:48:24:85:2e brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:48ff:fe24:852e/64 scope link
valid_lft forever preferred_lft forever
268: veth4f25563@if267: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether fe:fd:a1:b6:f8:8e brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::fcfd:a1ff:feb6:f88e/64 scope link
valid_lft forever preferred_lft forever
[root@iZ2zeh3bjq6rgnw0phucy7Z ~]# docker exec -it mycentos ip addr //容器得IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
267: eth0@if268: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
267: eth0@if268: 268(容器端): veth4f25563@if267(docker0)是对应得,通过veth 进行交互
网络示意图
容器互联–link (不建议使用)
docker run -it --link 链接得容器命 容器名
自定义网络
docker network //查看网卡命令
docker network ls // 查看所有网卡
docker network inspect 网络ID //查看网卡详细信息
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 网卡名称 //新建网卡
//--driver 管理网络的驱动程序(默认为bridge)
//--subnet 网段
//--gateway 子网
示例
1,新建容器
//docker run -d --net 网卡名称 --name 容器名 镜像名
docker run -d --net mynet --name to1 to
docker run -d --net mynet --name to2 to
2,to1可以直接链接通过容器ping to2 无需--link
docker exec -it to1 ping to2
docker network connect 网卡名称 容器名//容器链接网络