22-07-25 西安 Docker 镜像命令、容器命令、Dockerfile、私有仓库、阿里云镜像仓库

Docker 简介与组件

1、使用Docker的好处

Docker 是一个开源的应用容器引擎,基于 Go 语言开发

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,“一次封装,到处运行

只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作 。

  1. 一致的运行环境
  2. 秒级、甚至毫秒级启动时间
  3. 应用迁移方便

使用Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性。

容器与虚拟机的比较

与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小

1、传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox和VMWare等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。

2、Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。

容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高


2、Docker的组成图

​Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果

  1. Docker镜像是用于创建Docker容器的模板。
  2. 容器是独立运行的一个或一组应用
  3. Docker守护进程,是Docker服务器端进程,负责支撑Docker容器的运行以及镜像的管理。
  4. Docker客户端通过命令行或者其他工具使用Docker API.与Docker的守护进程通信
  5. Docker仓库用来保存镜像,Docker Hub提供了庞大的镜像集合供使用。用户也可以将自己本地的镜像推送到Docker仓库供其他人下载。Docker用Registry来保存用户构建的镜像。Registry分为公共私有两种       

3、Docker镜像

镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容。

我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件

更深层次理解镜像:

镜像是基于联合文件系统(UnionFS)的一种层式结构,由一系列指令一步一步构建出来。

UnionFS[联合文件系统]

支持对文件系统的修改作为一次提交来一层层叠加

  1. 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
  2. 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 | Microsoft Learn

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.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,经测试成功连接上


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值