docker mysql redis 镜像详解

**docker run :**创建一个新的容器并运行一个命令

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

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

  • -d: 后台运行容器,并返回容器ID;

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

  • -P: 随机端口映射,容器内部端口随机映射到主机的高端口

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

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

    • –name=“nginx-lb”: 为容器指定一个名称;
  • –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

  • –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

  • -h “mars”: 指定容器的hostname;

  • -e username=“ritchie”: 设置环境变量;

  • –env-file=[]: 从指定文件读入环境变量;

  • –cpuset=“0-2” or –cpuset=“0,1,2”: 绑定容器到指定CPU运行;

  • **-m 😗*设置容器使用内存最大值;

  • –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

  • –link=[]: 添加链接到另一个容器;

  • –expose=[]: 开放一个端口或一组端口;

  • –volume , -v: 绑定一个卷

  • 创建容器时没有添加参数 --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。

使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

docker run --name mynginx -d nginx:latest 

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

docker run -P -d nginx:latest 

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest 

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash 

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

docker run -it nginx:latest /bin/bash 

docker run -d –name ga3-redis -p 6380:6379 –restart=always redis:4.0.14-alpine –requirepass “LGkE7sPdyTpKjz1JQiyUYRkhT”

mysql -P 3307 -h 192.168.255.58 -u root -p -e “CREATE DATABASE ga3 default character set utf8mb4 collate utf8mb4_unicode_ci;”

ALTER USER ‘yourusername’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘youpassword’;

Docker Hello World

Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。

输出Hello world

docker run ubuntu:15.10 /bin/echo "Hello world" Hello world 

各个参数解析:

  • docker: Docker 的二进制执行文件。
  • run: 与前面的 docker 组合来运行一个容器。
  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo “Hello world”: 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。

运行交互式的容器

我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现**“对话”**的能力:

docker run -i -t ubuntu:15.10 /bin/bash 

各个参数解析:

  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。

启动容器(后台模式)

使用以下命令创建一个以进程方式运行的容器

 docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" 

在输出中,我们没有看到期望的 “hello world”,而是一串长字符

这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。

首先,我们需要确认容器有在运行,可以通过 **docker ps** 来查看:

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

在宿主主机内使用 **docker logs** 命令,查看容器内的标准输出:

ocker logs 2b1b7a428627 

停止容器

我们使用 docker stop 命令来停止容器:

通过 docker ps 查看,容器已经停止工作:

访问 Ubuntu 镜像库地址: https://hub.docker.com/_/ubuntu?tab=tags&page=1。

可以通过 Sort by 查看其他版本的 Ubuntu。默认是最新版本 ubuntu:latest 。

docker pull ubuntu 

或者:

docker pull ubuntu:latest 
docker images 
docker run -itd --name ubuntu-test ubuntu 

最后我们可以通过 docker ps 命令查看容器的运行信息:

Nginx是一个高效的HTTP和反向代理web服务器,同时也提供了IMAP / POP3 / SMTP服务。

可以通过排序查看其他版本的Nginx,默认为最新版本nginx:latest

此外,我们还可以用 docker search nginx 命令来查看可用版本:

这里我们拉取官方的最新版本的镜像:

docker pull nginx:latest:latest 
docker images 

安装完成后,我们可以使用以下命令来运行 nginx 容器:

 docker run --name nginx-test -p 8080:80 -d nginx--name nginx-test -p 8080:80 -d nginx 

参数说明:

  • –name nginx-test:容器名称。
  • -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
  • -d nginx: 设置容器在在后台一直运行。

最后我们可以通过浏览器可以直接访问 8080 端口的 nginx 服务:

MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。

访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags 。

可以通过 Sort by 查看其他版本的 MySQL,默认是最新版本 mysql:latest

此外,我们还可以用 docker search mysql 命令来查看可用版本:

这里我们拉取官方的最新版本的镜像:

 docker pull mysql:latest 

使用以下命令来查看是否已安装了 mysql:

docker images 

安装完成后,我们可以使用以下命令来运行 mysql 容器:

 docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql 

参数说明:

  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。

通过 docker ps 命令查看是否安装成功:

本机可以通过 root 和密码 123456 访问 MySQL 服务。

mysql -h localhost -uroot -p

可以通过按查看其他版本的python,或者是最新版本python: lastest进行排序。

此外,我们还可以用docker search python命令来查看可用版本:

docker search python 

这里我们拉取官方的镜像,标签为3.5

docker pull python:3.5:~/python$ docker pull python:3.5 

待下载完成后,我们就可以在本地镜像列表里查到 REPOSITORY 为python, 标签为 3.5 的镜像。

创建 Dockerfile</p>

首先,创建目录 python,用于存放后面的相关东西。

mkdir -p ~/python ~/python/myapp 

myapp 目录将映射为 python 容器配置的应用目录。

进入创建的 python 目录,创建 Dockerfile。

FROM buildpack-deps:jessie # remove several traces of debian python RUN apt-get purge -y python.* # http://bugs.python.org/issue19846 # > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK. ENV LANG C.UTF-8 # gpg: key F73C700D: public key "Larry Hastings <larry@hastings.org>" imported ENV GPG_KEY 97FC712E4C024BBEA48A61ED3A5CA953F73C700D ENV PYTHON_VERSION 3.5.1 # if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value '<VERSION>'" ENV PYTHON_PIP_VERSION 8.1.2 RUN set -ex \ && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \ && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc \ && export GNUPGHOME="$(mktemp -d)" \ && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY" \ && gpg --batch --verify python.tar.xz.asc python.tar.xz \ && rm -r "$GNUPGHOME" python.tar.xz.asc \ && mkdir -p /usr/src/python \ && tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \ && rm python.tar.xz \ \ && cd /usr/src/python \ && ./configure --enable-shared --enable-unicode=ucs4 \ && make -j$(nproc) \ && make install \ && ldconfig \ && pip3 install --no-cache-dir --upgrade --ignore-installed pip==$PYTHON_PIP_VERSION \ && find /usr/local -depth \ \( \ \( -type d -a -name test -o -name tests \) \ -o \ \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \ \) -exec rm -rf '{}' + \ && rm -rf /usr/src/python ~/.cache # make some useful symlinks that are expected to exist RUN cd /usr/local/bin \ && ln -s easy_install-3.5 easy_install \ && ln -s idle3 idle \ && ln -s pydoc3 pydoc \ && ln -s python3 python \ && ln -s python3-config python-config CMD ["python3"] 
docker build -t python:3.5 . 

创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像:

docker images python:3.5 

使用 python 镜像

在 ~/python/myapp 目录下创建一个 helloworld.py 文件,代码如下:

#!/usr/bin/python print("Hello, World!"); 
runoob@runoob:~/python$ docker run -v $PWD/myapp:/usr/src/myapp -w /usr/src/myapp python:3.5 python helloworld.py 

命令说明:

-v $PWD/myapp:/usr/src/myapp: 将主机中当前目录下的 myapp 挂载到容器的 /usr/src/myapp。

-w /usr/src/myapp: 指定容器的 /usr/src/myapp 目录为工作目录。

python helloworld.py: 使用容器的 python 命令来执行工作目录中的 helloworld.py 文件。

输出结果:

Hello, World! 

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 的 NoSQL 数据库,并提供多种语言的 API。

访问 Redis 镜像库地址: https://hub.docker.com/_/redis?tab=tags。

可以通过 Sort by 查看其他版本的 Redis,默认是最新版本 redis:latest

此外,我们还可以用 docker search redis 命令来查看可用版本:

这里我们拉取官方的最新版本的镜像:

$ docker pull redis:latest 

使用以下命令来查看是否已安装了 redis:

$ docker images 

安装完成后,我们可以使用以下命令来运行 redis 容器:

$ docker run -itd --name redis-test -p 6379:6379 redis 

参数说明:

  • -p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。

最后我们可以通过 docker ps 命令查看容器的运行信息:

接着我们通过 redis-cli 连接测试使用 redis 服务。

$ docker exec -it redis-test /bin/bash 

原文链接:https://blog.csdn.net/qq_41337034/article/details/104426327

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享