Docker 简介与组件
1、使用Docker的好处
Docker 是一个开源的应用容器引擎,基于 Go 语言开发
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,“一次封装,到处运行”
即只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作 。
- 一致的运行环境
- 秒级、甚至毫秒级启动时间
- 应用迁移方便
使用Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性。
容器与虚拟机的比较
与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。
1、传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox和VMWare等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。
2、Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。
容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高
2、Docker的组成图
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果
- Docker镜像是用于创建Docker容器的模板。
- 容器是独立运行的一个或一组应用
- Docker守护进程,是Docker服务器端进程,负责支撑Docker容器的运行以及镜像的管理。
- Docker客户端通过命令行或者其他工具使用Docker API.与Docker的守护进程通信
- Docker仓库用来保存镜像,Docker Hub提供了庞大的镜像集合供使用。用户也可以将自己本地的镜像推送到Docker仓库供其他人下载。Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种
3、Docker镜像
镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容。
我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
更深层次理解镜像:
镜像是基于联合文件系统(UnionFS)的一种层式结构,由一系列指令一步一步构建出来。
UnionFS[联合文件系统]
支持对文件系统的修改作为一次提交来一层层的叠加。
- 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
- Docker镜像实际上由一层一层的文件系统组成,这种层级的文件系统就叫UnionFS。
4、Docker容器
Docker容器:运行和隔离应用
镜像是静态的定义,容器是镜像运行时的实体
Docker安装与启动
1、安装Docker
Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,但是我们这里将Docker安装到CentOS上(安装在CentOS7.x以上的版)
1.查看CentOS7版本
cat /etc/redhat-release
2.安装gcc和g++
- yum -y install gcc
- yum -y install gcc-c++
3.安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
4.设置镜像仓库【阿里云服务器】
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.更新yum软件包索引
yum makecache fast
6.安装DOCKER CE(社区版)(DOCKER EE企业版收费)
yum -y install docker-ce
2、启动docker,检查docker版本
手动启动:systemctl start docker
检查版本:docker version
3、配置镜像加速
mkdir -p /etc/docker vim /etc/docker/daemon.json
daemon.json写入以下内容
{ "registry-mirrors": ["https://8y2y8njn.mirror.aliyuncs.com"] }
systemctl daemon-reload
2、Docker服务启停命令
启动docker: | systemctl start docker |
停止docker: | systemctl stop docker |
重启docker: | systemctl restart docker |
查看docker状态: | systemctl status docker |
开机启动: | systemctl enable docker |
查看docker概要信息: | docker info |
查看docker帮助文档: | docker --help |
设置docker开机自启动
systemctl enable docker
Docker镜像和容器
1、镜像相关命令
查看镜像:docker images
docker images -a
列出本地所有镜像(包含中间层)
---------------------------------------------------------------
选项说明: 1.Repository:表示镜像的仓库源 2.TAG:镜像的标签,同一个仓库源可以有多个TAG,代表不同的版本 3.IMAGE ID:镜像id 4.CREATED:镜像创建时间 5.SIZE:镜像大小
网络中搜索镜像:docker search 镜像名称 、如 docker search nginx
拉取镜像:docker pull [镜像名]:[TAG]
- docker pull 镜像名称:版本号 //拉取对应版本的镜像
- docker pull 镜像名称 //默认拉取最新的镜像
从远程仓库中拉取镜像,如果没有指定TAG,默认为latest
docker pull nginx 下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx:latest ) docker pull nginx:xxx 下载指定版本的Nginx镜像 (xxx指具体版本号)
删除镜像:docker rmi 镜像ID
- 删除单个镜像(-f 强制删除):docker rmi -f 镜像ID
- 删除多个镜像:docker rmi -f 镜像名1:TAG 镜像名2:TAG
- 删除所有镜像:docker rmi -f $(docker images -qa)
2、容器创建与启动
镜像是创建容器的软件 , 容器是由镜像运行产生的运行实例
查看正在运行的容器:docker ps
查看所有容器:docker ps –a
查看最后一次运行的容器:docker ps –l
查看停止的容器:docker ps -f status=exited
查看最近启动的一个容器: docker ps -n 1
-n = number 的意思
守护式创建容器:docker run -di --name=容器名称 镜像名称:标签
# 比如:docker run -di --name=mycentos10 centos:7
容器可以理解为独立的计算机
守护容器可以理解成在后台运行的容器
run这个命令做了什么??如下图
启动容器:docker start 容器名称(或者容器ID)
停止容器:docker stop 容器名称(或者容器ID)
退出容器: exit
删除容器:docker rm 容器名称(容器ID)
比如:docker rm mycentos10
删除容器的时候,如果容器在运行,会报错,必须先停止容器
也可以使用-f参数进行强制删除:docker rm -f 容器名称或id
3、容器创建的参数说明
docker run 常用参数
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
创建容器还有一种方式:交互式方式创建容器(但是不用)
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
以交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式启动容器,如果退出容器,则容器会进入停止状态。可以理解成交互式容器 是前台容器。
4、进入运行容器
方式一:docker exec
docker exec 相当于进入容器并开启一个新的终端,可以在里面操作。如果使用exit退出,容器也不会停止。
docker exec -it 容器id /bin/bash
方式二:docker attach
进入容器正在执行的终端,不会启动新的进程。如果使用exit退出,容器会停止运行!
docker attach 容器id
5、容器内日志查看
方式一:(推荐)
docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
如:docker logs -f -t --tail 行数
容器名[containerID]
-f
:跟随最新的日志打印-t
:在日志中加入时间戳--tail
:显示最后多少条日志
示例:
docker logs -f -t --tail 20 0f4845de4fc0
查看完毕后,ctrl+c
即可退出
----------------------------------------------------------------------------------
方式二:(不推荐按)
通过详细信息找到LogPath,那么它就在主机的目录结构下面
docker inspect 0f4845de4fc0 | grep LogPath
用less 或者cat查看日志
less /var/lib/docker/containers/0f4845de4fc0c2520424eee1fc28bacf4c83f558e742e94d2452fda5a13aa1df/0f4845de4fc0c2520424eee1fc28bacf4c83f558e742e94d2452fda5a13aa1df-json.log
6、容器的重启策略
Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关。
Docker容器的重启策略如下:
--restart具体参数值详细信息:
no
//
默认策略,容器退出时不重启容器;
on-failure
//
在容器非正常退出时(退出状态非0)才重新启动容器;
on-failure:3
//
在容器非正常退出时重启容1器,最多重启3次;
always
//
无论退出状态是如何,都重启容器;
unless-stopped
//
在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。
容器如果被守护进程重新拉起后,容器的id和名称都是不变的,但是对应在主机上的进程号会变化。
容器创建时,设置容器自动重启
docker run -d --restart=always --name 设置容器名xxx 使用的镜像yyy
如果创建时未指定 --restart=always,可通过update命令设置
docker update --restart=always 容器ID(或者容器名)
7、查看容器详细信息
docker inspect 容器名称(容器ID) #查看的信息会很多
docker inspect 0f4845de4fc0
1
Docker容器数据卷
1、docker cp
docker cp:在容器和主机之间复制文件/文件夹。
比如: docker cp anaconda-ks.cfg mycentos2:/usr/local/
命令格式:docker cp 容器id:容器内部路径 目的主机路径
其主要目的是保存容器中的数据,将其持久化
2、数据卷命令
docker volume ls
3、目录挂载
目录挂载:宿主机和docker容器目录之间进行映射
目录挂载创建容器:
docker run -di --name=容器的名字 -v 宿主机目录:容器目录 镜像名称:标签
在创建容器的时候,将宿主机目录与容器目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
---------------------------------
卷设计的目的:就是数据的持久化
完全独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷
如果出现权限不足
如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数
--privileged=true 来解决挂载的目录没有权限的问题
docker run -id --privileged=true --name=mycentos5 -v /usr/local/myhtml:/usr/local/myhtml centos:7
查看容器挂载。。
docker inspect 容器名
4、nginx静态资源部署
修改index.html文件。。
Docker-Compose
1、WSL
WSL全称:Windows Subsystem for Linux ,翻译过来就是“适用于Linux的WIndows子系统”
WSL并不是一个虚拟机,而是一个可以在Windows中运行原生Linux二进制文件的子系统。这意味着您可以在Windows上访问Linux的文件系统、使用Linux命令和工具,甚至在同一台计算机上同时运行Windows和Linux应用程序。这种集成性让WSL成为开发人员和系统管理员的首选工具之一。
安装指引:
wsl.exe --version
检查有关 WSL 及其组件的版本信息。
--------------------------------------
wsl.exe --list --verbose
查看安装在 Windows 计算机上的 Linux 发行版列表,其中包括状态(发行版是正在运行还是已停止)和运行发行版的 WSL 版本(WSL 1 或 WSL 2)
---------------------------------
wsl.exe --shutdown
立即终止所有正在运行的发行版和 WSL 2 轻量级实用工具虚拟机。
2、Docker Desktop
在Windows上安装Docker服务,可以使用Docker Desktop这个应用程序。
下载并安装这样的一个安装包
安装好后:执行命令
docker --version
从Docker Hub提取hello-world映像并运行一个容器:
docker run hello-world
这行命令会让docker从官方仓库中拉去hello-world的镜像到本地,并且自动将其实例化成容器
标签 | 含义 |
---|---|
REPOSITORY | 镜像所在的仓库名称 |
TAG | 镜像标签 |
IMAGEID | 镜像ID |
CREATED | 镜像的创建日期(不是获取该镜像的日期) |
SIZE | 镜像大小 |
Docker Desktop dashboard是docker的UI工具
3、镜像源修改设置
"registry-mirrors": [
"https://8y2y8njn.mirror.aliyuncs.com"
]
--------------------------------------------------------------------------------------
win系统请注意,默认镜像存放在c盘,建议修改到非c盘路径。
4、WSL发行版迁移
WSL2本质上是一个虚拟机,因此必然存在磁盘镜像文件。WSL发行版默认都是安装在C盘,在%LOCALAPPDATA%/Docker/wsl目录
Docker Desktop 会创建两个发行版:docker-desktop-data 和 docker-desktop
它们的默认位置在 C:\Users\<你电脑的用户名>\AppData\Local\Docker\wsl,
docker的运行数据、镜像文件都存在%LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx中,这对C盘空间紧张的人非常不友好。。。
如下就是导入导出迁移的操作方法,首先关闭docker,关闭所有发行版:
wsl.exe --shutdown
将docker-desktop-data导出到D:\docker-desktop-data.tar(注意,原有的docker images不会一起导出)
wsl.exe --export docker-desktop-data D:\docker-desktop-data.tar wsl.exe --export docker-desktop D:\docker-desktop.tar
注:
wsl --export <Distribution Name> <FileName>
<Distribution Name> 为目标 Linux 发行版的名称,如: docker-desktop-data
<FileName> 为导出的文件名,这里我导出到 D:\docker-desktop-data.tar导出结果:
原来的wsl文件夹就变成0字节了。。
然后注销并卸载docker-desktop-data:
wsl.exe --unregister docker-desktop-data wsl.exe --unregister docker-desktop
再次查看已安装的 Linux 发行版:
wsl -l -v
重新导入刚才导出的docker-desktop-data.tar和docker-desktop.tar,先保证D盘下wsl文件夹存在
wsl.exe --import docker-desktop-data D:\wsl\docker-desktop-data\ D:\docker-desktop-data.tar --version 2 wsl.exe --import docker-desktop D:\wsl\docker-desktop\ D:\docker-desktop.tar --version 2
注:wsl --import <Distribution Name> <InstallLocation> <FileName>
<Distribution Name> 为目标 Linux 发行版的名称,如: docker-desktop-data
<InstallLocation> 为要安装到的新位置,如:D:\wsl\docker-desktop-data\
<FileName> 为要导入的文件名,如:D:\docker-desktop-data.tar
迁移结果
5、Docker-Compose
Docker-Compose是Docker公司推出的一个工具软件,负责实现对Docker容器集群的快速编排。
Docker Compose和Docker版本对应关系:Compose file version 3 reference | Docker Docs
Docker Compose下载,下载这样的一个文件
docker-compose --version
6、docker-compose.yml
docker-compose.yml
Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)
使用docker-compose前提情况,需要创建一个文件名为docker-compose.yml的文件。
version: '3' services: tomcat: restart: always image: tomcat container_name: tomcat ports: - 8080:8080 volumes: - d://docker/tomcat/webapps:/usr/local/tomcat/webapps - d://docker/tomcat/logs:/usr/local/tomcat/logs environment: TZ: Asia/Shanghai
version:’3’ :表示compose对docker版本的支持,这里是compose版本,并非是docker版本。
services: 表示一个该配置文件的所有容器实例,支持配置多个容器实例。
tomcat:表示是一个多个容器中的其中一个
restart: always:表示该容器实例是随着机器启动而启动。
image: tomcat:表示本容器使用的镜像是tomcat,如需要指定版本号则 image: tomcat:8.0。
container_name: tomcat:表示容器的一个别名。
ports:表示容器端口映射到宿主机端口。
volumes:表示dockers容器的数据卷,将容器实例的目录映射到宿主机上盘符目录。
environment:表示容器环境的设置,我这里配置的是tomcat容器的时区时间为亚洲/上海。
后台启动配置中创建的容器:docker-compose up -d
停止配置中创建的容器:docker-compose stop
删除配置中创建的容器:docker-compose down
docker-compose config -q #检查配置,有问题才有输出
docker-compose logs yml里面的服务id #查看容器输出日志
7、vmmem进程
vmmem进程占用资源其实就表示有虚拟机在占用着资源。
wsl --shutdown
win10的hyper-v manager
在 WSL2 中使用 Docker 时,可能会造成 Vmmem 进程消耗掉全部的内存,导致机器卡顿,且通过任务管理器或者通过 taskkill 都无法终止此进程。
1.在用户目录下新建文件 .wslconfig
,增加下面的配置,限制其内存占用
[wsl2]
memory=6GB
swap=0
localhostForwarding=true
memory 的配置根据自己机器的内存配置,比如可以配置成机器内存的 1 / 3 或 1 / 4,以保证其他应用流畅使用
2.重启 WSL2:打开 服务(可通过 Win + R,运行 services.msc
),找到 LxssManager 服务,将其重启
Dockerfile构建镜像
1、Dockerfile
之前我们获得镜像,都是从Docker仓库中进行下载,接下来我们自己使用Dockerfile开发一个镜像
Dockerfile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfile文件并根据Dockerfile文件的描述来构建镜像。
举例如下:
#依赖的基础镜像名称和ID FROM centos:7 #指定镜像创建者信息 MAINTAINER atguigu #切换工作目录 WORKDIR /usr RUN mkdir /usr/local/java #ADD 是相对路径jar,把java添加到容器中 ADD jdk-8u144-linux-i586.tar.gz /usr/local/java/ #配置java环境变量 ENV JAVA_HOME /usr/local/java/jdk1.8.0_144 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH
镜像分层:好处是可以共享一些基础的层(基础镜像BaseImage)
添加安装包、依赖、配置等,每次操作都形成新的一层
2、Dockerfile构建指令
命令 | 作用 |
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 执行shell命令、一般是安装过程的命令 |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
ENV:在容器内部设置环境变量。
EXPOSE:容器运行时监听的特定网络端口。
VOLUME:为容器创建挂载点或声明卷
ADD:将文件、目录或远程URL复制到镜像中。
ENTRYPOINT:镜像中应用的启动命令,容器运行时调用
Run指令
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
FROM centos RUN yum -y install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos RUN yum -y install wget \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \ && tar -xvf redis.tar.gz
如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
3、docker build 构建镜像
在Dockerfile所在目录,执行命令构建镜像
docker build -t='jdk1.8' .
注意后边的空格和点,不要省略
查看镜像是否创建完成
docker images
基于JDK基础镜像
需要下载基础镜像,这里使用上传的方式jdk.tar
4、dockerfile-maven-plugin
dockerfile-maven-plugin是一个maven的插件,主要作用是在项目构建的时候生成基于项目的docker镜像文件。
dockerfile-maven-plugin的目标就是将maven的打包过程和docker的build过程结合在一起,当成功打包,既生成了对应的jar,也已生成了对应的docker镜像。
在pom中增加对dockerfile-maven-plugin插件的引用,核心代码如下:
<!-- dockerfile-maven-plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>com.naylor/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
增加Dockerfile文件
在项目根目录(和pom文件在同一级)新建一个Dokerfile文件,文件内容如下:
FROM java:8
EXPOSE 8080
ARG JAR_FILE
ADD target/${JAR_FILE} /app.jar
ENTRYPOINT ["java", "-jar","/app.jar"]
1
Docker迁移与备份
这里又有很多命令复制过去不对,但是用手打一遍就好使了,我怀疑是中文空格的原因吧
1、docker commit 将容器保存为镜像
docker commit 容器名称 镜像名称
例如:docker commit mynginx mynginx_i
2、docker save 将镜像备份为tar文件(就可以移动到别的服务器)
# 命令形式:docker save –o tar文件名 镜像名
# 保存镜像为文件 -o:表示output 输出的意思
docker save -o mynginx.tar mynginx_i
3、docker load 根据tar文件恢复为镜像
# 命令形式:docker load -i tar文件名
docker load -i mynginx.tar注意:直接删除 mynginx_i 镜像 ,发现会报错,因为当前镜像的容器正在运行,需要先停止容器,删除容器 , 在删除镜像。
Docker私有仓库
私有仓库搭建与配置
- 1.1 拉取私有仓库镜像
docker pull registry
- 1.2 启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
- 1.3 打开浏览器 输入地址 http://192.168.2.108:5000/v2/_catalog 看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
- 1.4 修改daemon.json
vim /etc/docker/daemon.json
"insecure-registries":["192.168.2.108:5000"] #改行目的是让容器信任该地址
systemctl restart docker #重启docker服务【这里还必须要重启,光 systemctl daemon- reload 不行 】
镜像上传至私有仓库
2.1标记此镜像为私有仓库的镜像
# 标记镜像为私有仓库的镜像
# docker tag jdk1.8 宿主机IP:5000/jdk1.8
docker tag jdk1.8 192.168.2.108:5000/jdk1.8
2.2启动私服容器
# 再次启动私有仓库容器
docker start registry
2.3上传标记的镜像
# 上传标记的镜像
# docker push 宿主机IP:5000/jdk1.8
docker push 192.168.2.108:5000/jdk1.8
2.4测试
重新刷新,发现jdk 1.8 已经上传到私服
从私有仓库拉取镜像
# 执行拉取镜像命令并查看
docker pull 192.168.2.108:5000/jdk1.8
docker images
Docker应用部署举例
1、Portainer
在云服务器上部署 Docker,并安装 Portainer 运维面板以及汉化。
Portainer是一个可视化的Docker操作界面,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
1、查询镜像
docker search portainer
2、拉取镜像
docker pull portainer/portainer
3、创建卷
docker volume create portainer_data
4、创建容器
创建之前我们可以先创建个文件夹存放容器的相关数据(做本地映射)
mkdir -p /home/docker/volume/data/
然后执行容器创建的命令:
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
访问Portainer系统
浏览器打开:http://portainer_IP:9000
ps:建议使用谷歌、火狐等浏览器打开。
3. 设置管理员
2、部署mysql
企业稳定版,5.5---5.7---8.0。本次 5.7 为准
select version();
1.查看mysql镜像
docker search mysql
2.拉取mysql镜像
docker pull mysql:5.7
3.创建mysql容器
docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
大体分为3部分
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
--privileged=true 放开权限
-v 挂载容器数据卷
容器卷:防止docker容器坏了,未雨绸缪
挂载在linux主机:docker容器之间,进行有效的数据维护和安全保障-e 代表添加环境变量
MYSQL_ROOT_PASSWORD 是root用户远程登陆密码创建守护式容器
4.启动mysql容器,在windows上远程登录mysql
登录进去的界面
5.进入mysql容器查看字符编码,密码是设置的123456
docker exec -it 235fc9cb98de bash
show variables like 'character%'; 查看字符编码
6.解决一个docker容器mysql实例的中文乱码问题
通过修改linux,可以同步给docker(因为用V设置了目录挂载)
[client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8
------------------------------------
重新启动mysql容器,进入容器,查看编码
docker restart mysql
3、部署tomcat
1.拉取镜像
docker pull tomcat:7-jre7
2.创建容器
# 创建tomcat容器;并挂载了webapps目录
docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
3.测试
在映射的宿主机目录/usr/local/webapps下创建如下:
- mkdir docker
- touch /docker/index.html
浏览器访问测试
4、部署nginx
1.拉取镜像
docker pull nginx
2. 创建容器
docker run -di --name=mynginx -p 80:80 nginx
3.测试
在浏览器
5、部署redis
1.拉取镜像
docker pull redis
2.创建容器
docker run -di --name=myredis -p 6379:6379 redis
3.测试
使用redis客户端,连接redis,经测试成功连接上