Docker笔记

1.Docke基础

1.1 理念

image-20200401172534612

​ Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。 一句话,Docker解决了运行环境和配置问题,方便做持续集成并有助于整体发布的容器虚拟化技术。

1.2 底层原理

​ Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。

docker容器
  • docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
  • docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。
  • docker vs vm

2.Docker安装(CentOS7环境)

2.1 卸载旧版本

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.2 安装所需要的包

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

2.3 设置stable

使用国内的阿里云,速度会快很多

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.4 更新yum软件包索引

sudo yum makecache fast     

2.5 安装docker-ce

sudo yum -y install docker-ce docker-ce-cli containerd.io

2.6 配置镜像加速

登录阿里云,配置自己的镜像加速器

镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://9gsicmpt.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.7 测试运行hello-world

docker run hello-world

3.Docker常用命令

3.1 命令参考文档

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with
                           "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

3.2 帮助命令

#查看信息
docker info
#查看版本
docke version
#帮助
docker --help

3.3 镜像命令

  1. 查看镜像信息
docker images

#查看镜像信息
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 413be204e9c3        44 hours ago        456MB
tomcat              latest              a7fa4ac97be4        2 weeks ago         528MB
oraclelinux         latest              0f4ffc192341        3 weeks ago         232MB
centos              latest              470671670cac        2 months ago        237MB
hello-world         latest              fce289e99eb9        15 months ago       1.84kB
hello-world         latest              fce289e99eb9        15 months ago       1.84kB
redis               3.2                 87856cc39862        17 months ago       76MB

REPOSITORY: 表示镜像的仓库源

TAG: 镜像的标签

IMAGE ID: 镜像ID

CREATED: 镜像创建时间

SIZE: 镜像大小

同一仓库源可以有多个TAG,代表这个仓库源有多个版本,可以使用REPOSITORY:TAG来定义不同的镜像。

OPTIONS:

-a  显示所有镜像

-q  只显示镜像ID

--digests   显示镜像的摘要信息

--no-trunc  显示完整的信息

  1. 查询应用
docker search 镜像名[:TAG]

DockerHub查询

image-20200401234236608

命令查询:

查询
OPTIONS:

-s  列出收藏数不小于指定值的镜像

-attomated  只列出automated build类型的镜像

--no-trunc  显示完整的镜像描述

  1. 下载镜像
docker pull 镜像名[:TAG]

#下载tomcat
[root@localhost ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
f15005b0235f: Pull complete
41ebfd3d2fd0: Pull complete
b998346ba308: Pull complete
f01ec562c947: Pull complete
74c11ae3efe8: Pull complete
3a7e595a3ef5: Pull complete
208407758d73: Pull complete
b5238120a381: Pull complete
1716556aae46: Pull complete
1336a11b2bd2: Pull complete
Digest: sha256:c0ba286d9903006423ff4e2818845f1cc4046aa829bbfbc9b96f887423cd9f47
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest

  1. 删除镜像
docker rmi 镜像ID | 镜像名:TAG

#删除hello-world
[root@localhost ~]# docker rmi hello-world:latest
Untagged: hello-world:latest
# 删除所有镜像
docker rmi -f $(docker images -qa)

3.4 容器命令

3.4.1 普通命令

有镜像才能创建容器,这个是前提

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明(常用):有些是一个减号,有些是两个减号

--name="容器新名字": 为容器指定一个名称;

-d: 后台运行容器,并返回容器ID,也即启动守护式容器;

-i:以交互模式运行容器,通常与 -t 同时使用;

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

-P: 随机端口映射;

-p: 指定端口映射,有以下四种格式

      ip:hostPort:containerPort

      ip::containerPort

      hostPort:containerPort

      containerPort

  1. 新建并启动容器
#使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令
[root@localhost ~]# docker run -it centos /bin/bash
[root@0ac5fdf2ade5 /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 01:00 pts/0    00:00:00 /bin/bash
root         15      1  0 01:00 pts/0    00:00:00 ps -ef

  1. 列出当前所有正在运行的容器
docker ps

OPTIONS说明(常用):

-a :列出当前所有正在运行的容器+历史上运行过的

-l :显示最近创建的容器。

-n:显示最近n个创建的容器。

-q :静默模式,只显示容器编号。

--no-trunc :不截断输出

查看运行容器
  1. 退出容器
  • exit: 容器停止退出
  • ctrl+P+Q: 容器不停止退出
  1. 启动容器
docker start 容器ID|容器名

  1. 重启容器
docker restart 容器ID|容器名

  1. 停止容器
docker stop 容器ID|容器名

  1. 强制停止容器
docker kill 容器ID|容器名

  1. 删除已停止的容器
#删除一个容器
docker rm 容器ID
#一次性删除多个容器
docker rm -f $(docker ps -qa)
docker ps -qa | xargs docker rm

3.4.2 重点命令
  1. 启动守护式容器
docker run -d 镜像名[:TAG]

image-20200402094334060

问题:然后docker ps -a 进行查看, 会发现容器已经退出

很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.

容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

  1. 查看容器日志
docker logs -tf --tail 10 容器ID

容器日志
OPTIONS

-t  加入时间戳

-f  跟随最新的日志打印

--tail 数字   显示最后几条  

  1. 查看容器内运行的进程
docker top 容器ID

  1. 进入正在运行的容器并以命令行交互
#重新进入容器,acctach 直接进入容器启动命令的终端,不会启动新的进程
docker attach 容器ID
#重新进入容器,exec 在容器中打开新的终端,并开启新的进程
docker exec -it 容器ID /bin/bash

容器交互
  1. 从容器拷贝文件到主机上
docker cp 容器ID:容器文件路径 主机目录

容器拷贝文件到主机
  1. 命令小结
attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像

build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像

commit    Create a new image from a container changes   # 提交当前容器为新的镜像

cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中

create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器

diff      Inspect changes on a container's filesystem   # 查看 docker 容器变化

events    Get real time events from the server          # 从 docker 服务获取容器实时事件

exec      Run a command in an existing container        # 在已存在的容器上运行命令

export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ]

history   Show the history of an image                  # 展示一个镜像形成历史

images    List images                                   # 列出系统当前镜像

import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]

info      Display system-wide information               # 显示系统相关信息

inspect   Return low-level information on a container   # 查看容器详细信息

kill      Kill a running container                      # kill 指定 docker 容器

load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]

login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器

logout    Log out from a Docker registry server          # 从当前 Docker registry 退出

logs      Fetch the logs of a container                 # 输出当前容器日志信息

port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口

pause     Pause all processes within a container        # 暂停容器

ps        List containers                               # 列出容器列表

pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像

push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器

restart   Restart a running container                   # 重启运行的容器

rm        Remove one or more containers                 # 移除一个或者多个容器

rmi       Remove one or more images             # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]

run       Run a command in a new container              # 创建一个新的容器并运行一个命令

save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]

search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像

start     Start a stopped containers                    # 启动容器

stop      Stop a running containers                     # 停止容器

tag       Tag an image into a repository                # 给源中镜像打标签

top       Lookup the running processes of a container   # 查看容器中运行的进程信息

unpause   Unpause a paused container                    # 取消暂停容器

version   Show the docker version information           # 查看 docker 版本号

wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值

3.5 命令总结

命令总结

4.Docker镜像

4.1 联合文件系统(UnionFS)

Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。 

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录 

4.2 Docker镜像加载原理

​ docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

​ bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

​ rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

Docker镜像结构
对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。 

4.3 分层镜像

镜像就像洋葱,一层一层的

分层镜像

特点:共享资源。比如,有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

​ Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层称为“容器层”,“容器层”之下为“镜像层‘。

4.4 镜像提交

docker commit -a="作者" -m="提交的描述信息" 容器ID 要创建的目标镜像名[:TAG]

[root@localhost ~]# docker commit -a "qianfg" -m="rename webapps.dist webapps" 6fc3493b6136  mytomcat:1.1
sha256:62f8298f1cc1c761e07b425d49b76482e40475ea887576009cf4f3185bf9c4f3
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mytomcat            1.1                 62f8298f1cc1        23 seconds ago      533MB
tomcat              latest              e36064f7c6f0        26 hours ago        528MB
centos              latest              470671670cac        2 months ago        237MB


5.Docker容器数据卷

5.1 数据卷

​ 数据卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

**数据卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷**。

特点:

1:数据卷可在容器之间共享或重用数据

2:卷中的更改可以直接生效

3:数据卷中的更改不会包含在镜像的更新中

4:数据卷的生命周期一直持续到没有容器使用它为止

5.2 挂载

#挂载
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

数据卷挂载
#查看数据卷是否挂载成功,挂载路径,读写权限
docker inspect 容器ID|grep "Mounts" -A 10
[root@localhost hostVolume]# docker inspect 0d1b5271fffa|grep "Mounts" -A 10
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/hostVolume",
                "Destination": "/containerVolume",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        "Config": {


#只读挂载
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

image-20200402134340761

显然,容器内文件只用查看权限,没有写入权限!

做个测试,把主机的/test文件夹爱挂载到tomcat容器的webapps目录下,这样可以在test目录下实时更新资源,浏览器访问可以实时更新!这样的的话,以后的项目在主机目录下进行修改,容器也会实时更新。

容器卷的使用
测试图

5.3 数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器 

6. DockerFile

6.1 Dockerfile构建过程解析

​ Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本,类似于shell脚本。

​ 构建三步骤:

  • 编写Dockerfile文件
  • docker build
  • docker run
centos的Dockerfile
#CentOS7的Dockerfile
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20191001"

CMD ["/bin/bash"]

Dockerfile基础知识:
1.每条保留字指令都必须为大写字母而且后面至少跟随一个参数
2.指令从上到小,顺序执行
3.#表示注释
4.每条指令都会创建一个新的镜像层,并对镜像进行提交

Dokerfile执行流程:
1.docker从基础镜像运行一个容器
2.执行一条指令并对容器做出修改
3.执行类似docker commit 的操作提交一个新的镜像层
4.docker在基于刚提交的镜像运行一个新容器
5.执行dockerfile中的下一条指令直到所有指令都执行完成

6.2 Dockerfile&镜像&容器

从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

* Dockerfile是软件的原材料

* Docker镜像是软件的交付品

* Docker容器则可以认为是软件的运行态。

Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

三者关系
  • Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;

  • Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;

  • Docker容器,容器是直接提供服务的。

6.3 Dockerfile保留字指令

FROM        基础镜像,当前新镜像是基于那个镜像的
MAINTAINER  镜像维护者的姓名和邮箱
RUN         容器构建时需要执行的指令
EXPOSE      当前容器对外暴露的端口
WORKDIR     指定在创建容器后,终端默认登录的工作目录
ENV         用来在构建镜像过程中设置环境变量
ADD         将宿主机目录下的文件拷贝进镜像而且ADD命令会自动处理URL和解压tar压缩包
COPY        类型ADD,拷贝文件到镜像目录中。
            将从构建上下文目录中<源路径>的文件复制到新的一层镜像内的<目标路径>位置
VOLUME      容器数据卷,用于数据保存和持久化工作
CMD         指定一个容器启动时要运行的命令
            Dockerfile中可以有多个CMD指令,但只用最后一个生效,并会被docker run之后的参数替换
ENTRYPOINT  制定一个容器启动时要运行的命令
            ENTRYPOINT同CMD一样,都是在指定容器启动程序及参数,但是不会被覆盖
ONBUILD     当构建一个被继承的Dockerfile是运行命令,父镜像在被子继承后父镜像的onbuild被触发

dockerfile

6.4 自定义镜像

自定义tomcat镜像

新建文件夹tomcat8,然后把需要的安装包放到该目录下

[root@localhost tomcat8]# pwd
/qianfg/dockerfile/tomcat8
[root@localhost tomcat8]# ls
apache-tomcat-8.5.50.tar.gz  Dockerfile  hello.txt  jdk-8u221-linux-x64.tar.gz
[root@localhost tomcat8]# cat hello.txt
hello world

第一步,在该目录下编写Dockerfile

#基础镜像
FROM centos
#作者姓名邮箱
MAINTAINER qianfg
#把宿主机当前上下文的hello.txt拷贝到容器的/usr/local/路径下
COPY hello.txt /usr/local/hello_container.txt
#把java和tomcat添加到容器中
ADD jdk-8u221-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.50.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置登录时访问目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java和tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_221
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.50
ENV CATALINA_VASE /usr/local/apache-tomcat-8.5.50
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
ENTRYPOINT ["/usr/local/apache-tomcat-8.5.50/bin/startup.sh"]
CMD ["/usr/local/apache-tomcat-8.5.50/bin/catalina.sh","run"]

第二部,构建镜像

#编写的文件在该目录下,可以省略-f选项
docker build -t qianfgtomcat8 .
#不省略-f选项
docker build -f /qianfg/dockerfile/tomcat8/Dockerfile -t qianfgtomcat8 .

镜像构建
构建结束

第三步,运行镜像

docker run -d -p 9080:8080 --name myt8 
-v /qianfg/dockerfile/tomcat8/test:/usr/local/apache-tomcat-8.5.50/webapps/test 
-v /qianfg/dockerfile/tomcat8/tomcat8logs/:/usr/local/apache-tomcat-8.5.50/logs 
--privileged=true qianfgtomcat8

Dockerfile

7.Docker常用安装

7.1 Docker安装mysql

#查询mysql5.7
docker serach mysql:5.7
#拉取mysql5.7
docker pull 5.7

查询mysql5.7
拉取mysql5.7
拉取完成
#运行mysql5.7容器
docker run -p 1234:3306 --name mysql -v /mysql/conf:/etc/my.cnf -v /mysql/logs:/logs -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

连接mysql

7.2 Docker安装redis

#查找收藏数大于5000的redis
docker search -s 5000 redis
#拉取redis
docker pull redis

查找redis

你可能感兴趣的:(Docker笔记)