目录
# 启动容器
docker run -d --name nginx01 -p 3344:80 nginx(要启动的镜像名)
-d:后台运行
--name:给容器取名
-p 主机端口:docker端口:将docker中的80端口映射到主机的3344端口,即localhost:3344,可以访问到docker的80端口
# 进入容器
docker exec -it 容器id /bin/bash [-c (可以执行command)]
docker attch 容器id
# 容器可视化
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
# 拷贝
docker cp 容器id:/root/file /root
# 容器数据卷
- 容器持久化和同步操作,容器之间也可以数据共享
docker run -it -v 主机目录:容器目录 -p 80:8080 tomcat
# 配置mysql
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=root -d -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql mysql
# 具名挂载和匿名挂载
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
# ro和rw
-v /宿主机路径:容器内路径:ro # readonly容器内只读,只能用宿主机编辑
-v /宿主机路径:容器内路径:rw # 读写
# 数据卷容器,实现多个容器之间数据共享
docker run -it --name docker02 --volumes-from docker01 mysql
# 多个mysql共享
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -d -v /etc/mysql/conf.d -v /var/lib/mysql mysql
docker run --name mysql02 -e MYSQL_ROOT_PASSWORD=root -d --volumes-from mysql01 mysql
数据卷容器的生命周期是持续到没有人使用为止
# 1、编写dockerfile :
FROM centos
VOLUME ["volume01"] # 匿名挂载
CMD echo -----end----
# 2、docker build 构建称为一个镜像
docker build -f dockerfile -t myimage:1.0 .
# 3、docker run 运行镜像
# 4、docker push发布镜像(DockerHub、阿里云镜像仓库)
基础知识:
1、保留关键字(指令)都必须是大写字母
2、# 表示注释
3、每一个指令都会创建提交一个新的镜像层,并提交
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建时需要运行的命令 ===> RUN yum -y install vim
ADD # 添加内容
WORKDIR # 镜像的目录
VOLUME # 挂载目录
EXPOST # 暴露端口配置
CMD # 指定容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定容器启动时要运行的命令,可以追加命令
ONBUILD # 构建一个被继承DockerFile这个时候就好运行ONBULD指令,触发指令
COPY # 类似ADD,将文件拷贝到镜像中
ENV # 构建的时候设置环境变量 ==> ENV key value
# docker tomcat镜像构建
# dockerhub镜像发布
docker login -u 用户名
docker tag imageId newname:1.0
docker push newname:1.0
1、每启动一个docker容器,docker就会给docker容器分配一个ip,只要安装了docker就会有一个docker0网卡
(桥接模式,使用的技术是evth-pair)
evth-piar:一对虚拟设备接口,他们都是成对出现,一段连接协议,一段彼此相连
# NAT(直连)
Docker中的所有网络接口都是虚拟的。虚拟的转发效率高。(内网传递文件)
只要容器删除,对应网桥消失
# 查看网络
docker network ls
# --link 通过主机名ping通网络,而不是ip(不建议)
docker run --name tomcat02 --link tomcat01 tomcat
本质在hosts配置了一个
ip tomcat01
# 自定义网络
1、网络模式
bridge : 桥接
none : 不配置网络
host : 和宿主机共享网络
container:容器网络连同(用的少)
2、创建网络
docker network create --driver bridge --subnet 192.168.0.0/16 --geteway 192.168.0.1 mynet
3、使用网络
docker run -d -P --name tomcat-net-01 --net mynet tomcat
# 16表示子网掩码255.255.0.0
# 网络连同 docker 和 mynet已经不是一个网段 不能连同
docker network connect mynet tomcat01(docker网段)
docker network inspect mynet
# 结果:将tomcat01加入mynet ,一个容器两个ip