一、常用命令
查看可安装的docker版本
yum list | grep docker
从宿主机复制到容器:docker cp 宿主机本地路径 容器名字/ID:容器路径
docker cp /root/123.txt mycentos:/home/
从容器复制到宿主机:docker cp 容器名字/ID:容器路径 宿主机本地路径
docker cp mycentos:/home/456.txt /root
宿主机文件夹挂载到容器里:docker run -itd -v 宿主机路径:容器路径 镜像ID
docker run -itd -v /root/xdclass/:/home centos:7
一次性停止所有容器:docker stop $(docker ps -a -q)
二、构建镜像
2.1Commit构建自定义镜像
启动并进入容器:docker run -it centos:7 /bin/bash 在/home 路径下创建xdclass文件夹:mkdir /home/xdclass 安装ifconfig命令:yum -y install net-tools 重启容器,查看容器的xdclass文件夹还在不在:docker restart 67862569d4f7 删除容器,再重新启动一个容器进入查看有没有xdclass文件夹:docker rm 67862569d4f7 && docker run -it centos:7 /bin/bash 构建镜像: docker commit 4eb9d14ebb18 mycentos:7 docker commit -a “XD” -m “mkdir /home/xdclass” 4eb9d14ebb18 mcentos:7 -a:标注作者 -m:说明注释 查看详细信息:docker inspect 180176be1b4c 启动容器:docker run -itd 180176be1b4c /bin/bash 进入容器查看:docker exec -it 2a4d38eca64f /bin/bash
2.2 dockerfile构建镜像
FROM centos:7
# 设置作者
MAINTAINER XD 123456@qq.com
# RUN 是执行命令
RUN echo "正在构建镜像!!!"
# 设置工作目录,容器内的工作目录
WORKDIR /home/xdclass
# COPY 当前目录下的文件 到容器内的某个目录
COPY 123.txt /home/xdclass
# RUN 是执行命令,在容器内执行的命令
RUN yum install -y net-tools
Dockerfile
构建dockerfile文件:docker build -t mycentos:v2 .
查看:docker images
三、DockerFile常用的Dockerfile指令
FROM 基于哪个镜像 MAINTAINER 注明作者 COPY 复制文件进入镜像(只能用相对路径,不能用绝对路径) ADD 复制文件进入镜像(假如文件是.tar.gz文件会解压) WORKDIR 指定工作目录,假如路径不存在会创建路径 ENV 设置环境变量 EXPOSE ** 暴露容器端口** RUN 在构建镜像的时候执行,作用于镜像层面 ENTRYPOINT 在容器启动的时候执行,作用于容器层 ,dockerfile里有多条时只允许执行最后一条 CMD 在容器启动的时候执行,作用于容器层 ,dockerfile里有多条时只允许执行最后一条
容器启动后执行默认的命令或者参数,允许被修改 命令格式: shell命令格式:RUN yum install -y net-tools exec命令格式:RUN [ “yum”,“install” ,"-y" ,“net-tools”]
#第一个
FROM centos:7
RUN echo "images building!"
CMD ["echo","container","starting..."]
ENTRYPOINT ["echo","container","starting !!!"]
#第二个
FROM centos:7
RUN echo "images building!"
CMD ["echo","containe1r","starting..."]
CMD ["echo","container2","starting..."]
ENTRYPOINT ["echo","container2","starting !!!"]
ENTRYPOINT ["echo","container2","starting !!!"]
#第三个
FROM centos:7
CMD ["-ef"]
ENTRYPOINT ["ps"]
FROM centos:7
ADD jdk-8u211-linux-x64.tar.gz /usr/local
RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk
ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
ADD apache-tomcat-8.5.35.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
docker run -itd -p 80:8080 -v /root/test/ROOT:/usr/local/tomcat/webapps/ROOT
mycentos:jdk /bin/bash
四、docker网络模式
默认的三种网络模式: bridge:桥接模式 host:主机模式 none:无网络模式 查看网络模式: docker network ls
4.1桥接模式
桥接模式是docker 的默认网络设置,当Docker服务启动时,会在主机上创建一个名为docker0的虚拟网桥,并选择一个和宿主机不同的IP地址和子网分配给docker0网桥
安装工具:
yum -y install net-tools
yum install -y bridge-utils
查看网络路由 route -n
查看桥接情况: brctl show
4.2 host模式
host 模式:该模式下容器是不会拥有自己的ip地址,而是使用宿主机的ip地址和端口。
启动nginx容器命令并防火墙放开80端口: docker run -d --net=host mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;” firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload
4.3 none模式
none模式:关闭模式 无法连外网
同一个服务器,桥接模式下 ,同一个服务器中的 多个镜像网络是 互通的
4.4 Docker 容器间基于Link实现单向通信
基于link单向通信
启动mysql数据库容器:
docker run --name mydb -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:5.7
启动tomcat应用容器并link到mysql数据库:
docker run -itd --name tomcat1 --link mydb tomcat:tag注意:mydb 这个容器一定要存在!
官方版的mysql 5.7 需要安装工具才有ping命令:
apt-get update && apt-get install iputils-ping
4.5 Docker容器间利用brige网桥实现双向通信
创建一个新的网桥:docker network create -d bridge my_bridge 启动第一个容器:docker run -itd --name tomcat centos:7 启动第二个容器:docker run -itd --name redis centos:7 把第一个容器加入网桥:docker network connect my_bridge tomcat 把第二个容器加入网桥:docker network connect my_bridge redis 最后分别进入俩个容器中进行验证
4.6 Docker容器的特权模式介绍
启动一个普通的容器 docker run -itd --name mycentos centos:7 /bin/bash 安装网络工具: yum -y install net-tools 执行route -n 删除网关: route del default gw 172.17.0.1 启动拥有特权模式的容器:docker run -itd --privileged=true --name mycentos1 centos:7 /bin/bash 进入容器: docker exec -it ef /bin/bash 删除网关 route del default gw 172.17.0.1 成功 备注:特权模式用的比较少
4.7 使用volume容器共享创建nginx集群
使用–volumes-from 实现容器与容器之间volume共享 创建nginx1 docker run -itd -p 8080:80 -v /usr/local/nginx/html:/usr/local/nginx/html --name nginx1 mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;” 创建nginx2 docker run -itd -p 8081:80 --volumes-from nginx1 --name nginx2 mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;” 创建nginx3 docker run -itd -p 8082:80 --volumes-from nginx1 --name nginx3 mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;” 对/usr/local/nginx/html/index.html进行修改 打开浏览器进行访问测试
使用docker inspect 容器ID 可以查看详细的挂载信息
compose操作容器(一定要进入配置文件目录) 后台启动容器:docker-compose up -d 查看容器运行情况:docker-compose ps 停止并删除容器:docker-compose down 停止并删除容器并删除volume:docker-compose down --volumes 停止启动容器:docker-compose stop;docker-compose start docker-compose exec的使用:docker-compose exec redis bash 总结: 操作docker-compose一定要在配置文件docker-compose.yml文件路径下操作 格式一定要注意,该空格要空格
docker-compose.yml的三大部分:version,services,networks,最关键是services和networks两个部分 compose设置网络模式 compose使用端口映射 compose设置文件共享 compose管理多个容器
ps -ef | grep nginx
netstat -tunlp | grep
五、阿里云仓库
阿里云镜像仓库申请地址: https://cr.console.aliyun.com/cn-shanghai/instances/repositories步骤: 登录阿里云Docker Registry $ sudo docker login --username=用户名registry.cn-shenzhen.aliyuncs.com
将镜像推送到Registry
登录 $ sudo docker login --username=用户名 registry.cn-shenzhen.aliyuncs.com
改名
$ sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/xdclassimages/mysql:[镜像版本号]
推送
$ sudo docker push registry.cn-shenzhen.aliyuncs.com/xdclassimages/mysql:[镜像版本号]
从Registry中拉取镜像 $ sudo docker pull registry.cn-shenzhen.aliyuncs.com/xdclassimages/mysql:[镜像版本号]
六、构建自己的镜像仓库Harbor
安装之前确保前置条件是否满足,需要安装docker、docker-compose、openssl以及python2.7以上安装 yum -y install openssl Harbor离线版安装下载地址 https://github.com/goharbor/harbor/releases上传对应安装包
修改配置:harbor.yml 修改主机名(注意空格):hostname: 192.168.0.151 修改密码(注意空格):harbor_admin_password: Harbor12345 执行脚本:sh prepare 执行安装命令:sh install.sh执行命令:docker-compose ps 访问Harbor,默认用户名admin 关闭:docker-compose down 启动:docker-compose up -d
登录
企业核心篇幅之harbor仓库配置与使用 简介:配置与使用harbor仓库 Docker配置使用自建仓库 默认docker只允许访问 https仓库 如果要访问http仓库需要自己配置 配置允许访问http仓库:/etc/docker/daemon.json { “insecure-registries”:[“http://192.168.0.151”] }
重启docker服务:systemctl restart docker.service
网页上创建项目名
登录:docker login --username=admin 192.168.0.151 改名:docker tag mysql:5.7 192.168.0.151/xdclass/mysql:5.7 推送:docker push 192.168.0.151/xdclass/mysql:5.7 下载:docker pull 192.168.0.151/xdclass/mysql:5.7 docker login 后有一个登录凭证(可删除,下次需要密码): /root/.docker/config.json (建议从安全角度出发,每次登录后进行删除)
可以删除 config.json 文件
七、实战系列之本地镜像容器的载入与载出
镜像的本地载入载出俩种办法: 保存镜像 保存容器
保存镜像(二选一): docker save cd3ed0dfff7e -o /home/mysql.tar docker save mysql:5.7 > /home/mysql.tar 载入镜像: docker load -i mysql.tar
保存容器: docker export 974b919e1fdd -o /home/mysql-export.tar 载入容器: docker import mysql-export.tar
|