前言 Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。(维基百科 )
安装Docker MacOS 1 brew cask install docker
Linux
下载依赖 1 yum -y install yum-utils device-mapper-persistent-data lvm2
设置下载Docker的镜像源(可选) 1 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker 1 2 yum makecache fast yum -y install docker-ce
启动Docker MacOS
Linux 启动服务
设置开机自启
测试是否安装成功
中央仓库
配置私服 Linux
1 vim /etc/docker/daemon.json
<ip>
:私服ip<port>
:私服端口号
1 2 3 4 { "registry-mirrors":["https://registry.docker-cn.com"], "insecure-registries":["<ip>:<port>"] }
1 2 systemctl daemon-reload systemctl restart docker
镜像操作 拉取镜像到本地
<name>
:镜像名
指定版本 1 docker pull <name>:<version>
查看全部的镜像
删除本地镜像
<image_id>
:镜像标识(可以简写)
强制删除
1 docker rmi -f <image_id>
查看镜像中设置的默认命令 1 docker history <image_id>
指定任意命令替换默认
<command>
:Linux命令
1 docker run -it <image_id> <command>
镜像的导入导出(不规范) 导出
<src>
:导出的路径<name>
:导出后的文件名
1 docker save -o <src>/<name> <image_id>
导入 1 docker load -i <src>/<name>
修改导入后的空名称
:<version>
:标签,通常为版本号,默认为最新版本lastest
(可选)
1 docker tag <image_id> <name_new>:<version>
镜像的导入导出(重定向) 导出 1 docker save <name> <name>:<version> | gzip > <src>/<name>
导入 1 docker load < <src>/<name>
清理所有名称为空的镜像
容器的操作 运行容器
<name>:<version>
:镜像名和标签指定镜像<image_id>
:通过镜像唯一标识指定镜像
1 2 3 docker run <name>:<version> docker run <image_id>
参数
-d
:后台运行容器-p
:为了映射当前宿主机的端口和容器的端口
<port_out>
:宿主机端口<port_in>
:容器端口
--name <name>
:指定容器名称
<name>
:容器名称
-e
:在容器中添加环境变量-i
:交互,通常和-t组合使用-t
:提供终端--rm
:容器关闭时,自动删除容器--restart=always
:容器总是自动启动,当docker重启,容器也会自动启动
1 2 3 docker run -d -p <port_out>:<port_in> --name <name> <name>:<version> docker run -d -p <port_out>:<port_in> --name <name> <image_id>
1 docker run -it <image_id>
mysql在运行时指定初始密码
1 docker run -d -p <port_out>:<port_in> --name <name_in> -e MYSQL_ROOT_PASSWORD=<password> <image_id>
查看正在进行的容器
参数
-a
:查看所有容器,包括未运行的容器-q
:只查看标识,不查看别的内容
1 2 3 docker ps -aq docker container ls -a
启动容器
<con_id>
:容器的唯一标识
重启容器 1 2 3 docker restart <con_id> docker container restart <con_id>
停止容器 1 2 3 docker stop <con_id> docker container stop <con_id>
停止全部容器 1 docker stop $(docker ps -aq)
删除容器
强制删除容器
删除全部容器 1 docker rm $(docker ps -aq)
进入到容器内部
1 2 3 docker exec -it <con_id> bash docker exec -it <con_id> <command>
查看容器的日志
-f
:滚动查看日志的最后几行
1 2 3 docker logs <con_id> docker container logs <con_id>
清理所有终止状态的容器
复制宿主机内容到容器内部
<file_old>
:宿主机文件的路径及文件名<file_new>
:容器内部文件想要存放的路径名
1 docker cp <file_old> <con_id>:<file_new>
数据卷
将宿主机的一个目录映射到容器的一个目录中
可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变
创建数据卷
创建数据卷后,宿主机会产生一个新目录,作为数据卷交换数据的目录
/var/lib/docker/volumes/<name>/_data
<name>
:数据卷名称
1 docker volume create <name>
查看数据卷的详细信息 1 docker volume inspect <name>
查看全部数据卷
删除数据卷
映射数据卷
类似于挂载操作(将容器内部的指定目录映射到宿主机的指定目录)
-v
:指定映射数据卷的参数
<src_out>
:定义一个数据卷在宿主机的存放路径及目录名(如果在这之前没有创建过数据卷,Docker会自动创建目录并将其作为数据卷映射的目录,缺点是不能将当前容器内部的数据同步出来。如果在这之前创建过数据卷,请指定路径为创建数据卷后的默认路径,优点是能将容器内部当前的数据同步出来。所以推荐先手动创建数据卷,再将路径指向新建数据卷后的默认位置)<src_in>
:想要映射容器内部目录的路径
1 docker run -d -p <port_out>:<port_in> --name <name_in> -v <src_old>:<src_in> <image_id>
容器互联 创建虚拟网络
--subnet=172.18.0.0/24
:指定网段和子网掩码-d
:指定网络类型
bridge
overlay
<name>
:网络名称
1 docker network create <name>
查看所有虚拟网络
删除虚拟网卡 docker network rm
查看网络详情
查看宿主机上新建的虚拟网卡
连接虚拟网络
默认网段为172.18.0.0
,默认宿主机IP为172.18.0.1
--ip
:手动指定固定IP--net
:等价于–network
1 docker run --network <name> <image_id>
自定义镜像
相当于自定义构建脚本Dockfile文件,通过构建脚本自动化构建环境
创建一个Dockerfile文件
创建一个Dockerfile文件(无扩展名),并且指定自定义镜像信息
Dockerfile文件中的特殊命令
FROM
:指定当前自定义镜像以来的环境ADD
:将压缩包传入镜像中的指定目录,并同时解压RUN
:在镜像内执行一条命令ENV
:设置环境变量EXPOSE
:暴露端口ENTRYPOINT
:设置启动时执行的命令COPY
:将相对路径下的内容复制到自定义镜像中WORKDIR
:声明镜像默认的工作目录CMD
:需要执行的命令(在workdir下执行,cmd可以写多个但只以最后一个为准)
编辑Dockerfile文件
举例:在CentOS7系统上配置JDK8环境,并部署Tomcat7服务器
1 2 3 4 5 6 7 8 9 FROM centos:7 ADD jdk-8u212-linux-x64.tar.gz /opt/ ADD apache-tomcat-7.0.96.tar.gz /usr/ RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat ENV JAVA_HOME=/opt/jdk1.8.0_212 \ CATALINA_HOME=/usr/tomcat \ PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin EXPOSE 8080 ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out
1 2 3 4 5 6 FROM centos:7 ADD jdk-8u212-linux-x64.tar.gz /opt/ COPY sp05-eureka-0.0.1-SNAPSHOT.jar /opt/ ENV JAVA_HOME=/opt/jdk1.8.0_212 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/jdk1.8.0_212/bin ENTRYPOINT ["java", "-jar", "/opt/sp05-eureka-0.0.1-SNAPSHOT.jar"] CMD ["--spring.profiles.active=eureka1", "--server.port=2001"]
通过Dockerfile制作镜像
<name>
:自定义的镜像名称,后面可以追加:版本号
<dockerfile>
:Dockerfile文件存放的的路径,脚本中涉及到的文件需要放在同一个目录下
1 docker build -t <name> <dockerfile>
docker-compose Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application’s services. Then, using a single command, you create and start all the services from your configuration. To learn more about all the features of Compose see the list of features.(Github )
通过docker-compose批量管理Docker容器
准备工作
配置文件 创建配置文件
配置文件要和docker-compose
在同一目录下
1 touch docker-compose.yml
编辑配置文件
修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 version: "3.1" services: mysql: restart: always image: mysql container_name: mysql ports: - 3306 :3306 environment: MYSQL_ROOT_PASSWORD: root TZ: UTC tomcat: restart: always image: tomcat container_name: tomcat ports: - 8080 :8080 environment: TZ: UTC
启动docker-compose管理的容器
以后台启动
关闭并删除docker-compose管理的容器
开启docker-compose管理的容器
关闭docker-compose管理的容器
重启docker-compose管理的容器
查看docker-compose管理的容器
-a
:查看所有容器,包括未运行的容器-q
:只查看标识,不查看别的内容
查看docker-compose管理的容器日志
-f
:滚动查看
完成 参考文献 哔哩哔哩——千锋Java学习营 菜鸟笔记 哔哩哔哩——云原生技术架构