docker学习笔记

一.下载docker,并安装

Docker Desktop 官方下载地址

1.CentOS 7安装docker

1.使用官方安装脚本自动安装
curl -sSL https://get.daocloud.io/docker | sh

2.安装 Docker Engine-Community

2.Win10 安装

一直点下一步就好

如果不能使用,就看看有没有安装 Hyper-V
最新的设备是默认开启的,

二.容器使用

1.docker查看所有命令

使用docker 查看docker的所有命令

还可以用docker (command )–help 更深入的了解指定的 Docker 命令使用方法 为你要详细查看的命令

2.获取镜像

#获取 ubuntu 系统镜像 可以改成其他的镜像

docker pull ubuntu

3.查看拥有的镜像

docker images

docker ps -a

查看已经启动的镜像
docker ps

3.启动镜像

## 1.前台运行

docker run -it ubuntu /bin/bash
-i: 交互式操作。

-t: 终端。

ubuntu: ubuntu 镜像。

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
 退出使用    exit:

#后台运行 -d 指定容器的运行模式。

docker run -itd --name ubuntu-test ubuntu /bin/bash

4.进入容器

#不推荐使用,退出会关闭容器
docker attach 1e560fca3906(容器id)

#推荐使用  从容器退出,容器不会停止
docker exec -it 243c32535da7 /bin/bash

5.容器操作

#查看所有容器
docker images
#启动容器
docker start 容器id或容器名
#查看容器日志
docker logs 容器id或容器名
#重启容器
docker restart 容器id或容器名
#停止容器
docker stop  容器id或容器名
#删除容器
docker rm -f 1e560fca3906

6.导出和导入容器

#导出容器
docker export 1e560fca3906(容器id或容器名) > ubuntu.tar
#导入容器快照
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
或通过指定 URL 或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo

三.镜像使用

1.列出镜像列表

docker images

2.查找镜像

docker search 镜像名

3.下载一个新的镜像

docker pull ubuntu:13.10(镜像名:版本号)

4.提交镜像

docker commit -m="has update" -a="nhooo" e218edb10161 nhooo/ubuntu:v2
各个参数说明:

-m: 提交的描述信息

-a: 指定镜像作者

e218edb10161:容器 ID

nhooo/ubuntu:v2: 指定要创建的目标镜像名

5.构建镜像

docker build (dockerfile文件)

6.镜像重命名

docker rename 原容器名称 新容器名称

四,容器连接

1.#创建了一个 python 应用的容器

docker run -d -P training/webapp python app.py

#使用 -P 参数创建一个容器,使用 docker ps 可以看到容器端口 5000 绑定主机端口 32768
#-p 标识来指定容器端口绑定到主机端口。

#两种方式的区别是:

#-P :是容器内部端口随机映射到主机的高端口。

#-p : 是容器内部端口绑定到指定的主机端口。

2.使用-p绑定到5000端口,映射到主机5000端口

docker run -d -p 5000:5000 training/webapp python app.py

3.指定容器绑定的网络地址,比如绑定 127.0.0.1

docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

4.默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

5.查看端口的绑定情况

docker port  容器id或名称

6.Docker 容器互联

7.容器命名

#使用 --name 标识来命名容器
docker run -d -P --name nhooo training/webapp python app.py

8.新建网络

docker network create -d bridge test-net
#-d:参数指定 Docker 网络类型,有 bridge、overlay。
#其中 overlay 网络类型用于 Swarm mode

9.连接容器

运行一个容器并连接到新建的 test-net 网络:

docker run -itd --name test1 --network test-net ubuntu /bin/bash

打开新的终端,再运行一个容器并加入到 test-net 网络:

docker run -itd --name test2 --network test-net ubuntu /bin/bash

通过 ping 来证明 test1 容器和 test2 容器建立了互联关系如果 test1、test2 容器内中无 ping 命令,则在容器内执行以下命令安装 ping

命令安装 ping
apt-get update
apt install iputils-ping
#进入容器1 ping 容器2
ping test2

10.配置 DNS

linux系统 在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
配置完,需要重启 docker 才能生效

{
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}
#查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息
docker run -it --rm  ubuntu  cat etc/resolv.conf

11.手动指定容器的配置

docker run -it --rm -h host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu
#参数说明:

#--rm:容器退出时自动清理容器内部的文件系统。

#-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。

#--dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。

#--dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。

五.仓库管理

Docker Hub
目前 Docker 官方维护了一个公共仓库 Docker Hub。

大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
注册
在 https://hub.docker.com 免费注册一个 Docker 账号。

1. 登录和退出

登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像。

#登录
docker login
#退出
docker logout

2.拉取镜像

例:
以 ubuntu 为关键词进行搜索

#搜索镜像
docker search ubuntu
#拉取镜像
docker pull ubuntu

3.推送镜像

用户登录后,可以通过 docker push 命令将自己的镜像推送到 Docker Hub。

docker tag ubuntu:18.04 username/ubuntu:18.04

六.Docker Dockerfile

1.使用 Dockerfile 定制镜像

在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:

FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html

2.FROM 和 RUN 指令的作用

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

RUN:用于执行后面跟着的命令行命令。
shell 格式:

RUN <命令行命令>
<命令行命令> 等同于,在终端操作的 shell 命令。

exec 格式:

RUN ["可执行文件", "参数1", "参数2"]
例如:
RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大

例:

ROM centos
RUN yum 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 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.开始构建镜像

#通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)
docker build -t nginx:v3 

COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

更多的命令请参考此教程

七.Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

1.使用步骤

Compose 使用的三个步骤:

使用 Dockerfile 定义应用程序的环境。

使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

最后,执行 docker-compose up 命令来启动并运行整个应用程序。

2.Compose 安装

2.1Linux

Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。

运行以下命令以下载 Docker Compose 的当前稳定版本:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换 1.24.1。

将可执行权限应用于二进制文件:

$ sudo chmod +x /usr/local/bin/docker-compose

创建软链:

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

$ docker-compose --version
#返回信息
#cker-compose version 1.24.1, build 4667896b

注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。

2.2windows PC

Windows 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序.因此 Windows 用户不需要单独安装 Compose。

3.使用Compose

1、准备

创建一个测试目录:

#mkdir composetest
#cd composetest
在测试目录中创建一个名为 app.py 的文件,并复制粘贴以下内容:
composetest/app.py 文件代码

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

在此示例中,redis 是应用程序网络上的 redis 容器的主机名,该主机使用的端口为 6379。

在 composetest 目录中创建另一个名为 requirements.txt 的文件,内容如下:

flask
redis

2、创建 Dockerfile 文件

在 composetest 目录中,创建一个名为的文件 Dockerfile,内容如下:

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]

Dockerfile 内容解释:

FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像。

WORKDIR /code: 将工作目录设置为 /code。

ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0

设置 flask 命令使用的环境变量。

RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速。

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

复制 requirements.txt 并安装 Python 依赖项。

COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录。

CMD [“flask”, “run”]: 容器提供默认的执行命令为:flask run。

3、创建 docker-compose.yml

在测试目录中创建一个名为 docker-compose.yml 的文件,然后粘贴以下内容:

docker-compose.yml 配置文件

# yaml 配置
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

该 Compose 文件定义了两个服务:web 和 redis。

web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。

redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。

4、使用 Compose 命令构建和运行您的应用

在测试目录中,执行以下命令来启动应用程序:

docker-compose up

如果你想在后台执行该服务可以加上 -d 参数:

docker-compose up -d

八,Docker Machine

Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。

Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。

Docker Machine 管理的虚拟主机可以是机上的,也可以是云供应商,如阿里云,腾讯云,AWS,或 DigitalOcean。

使用 docker-machine 命令,您可以启动,检查,停止和重新启动托管主机,也可以升级 Docker 客户端和守护程序,以及配置 Docker 客户端与您的主机进行通信。

1.安装

安装 Docker Machine 之前你需要先安装 Docker。
Linux 安装命令

base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
  chmod +x /usr/local/bin/docker-machine

macOS 安装命令

base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
  chmod +x /usr/local/bin/docker-machine

Windows 安装命令
如果你是 Windows 平台,可以使用 Git BASH,并输入以下命令:

base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  mkdir -p "$HOME/bin" &&
  curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&
  chmod +x "$HOME/bin/docker-machine.exe"

查看是否安装成功:

docker-machine version

#返回信息
docker-machine version 0.16.0, build 9371605

2.使用

1、列出可用的机器
可以看到目前只有这里默认的 default 虚拟机。

docker-machine ls

2、创建机器
创建一台名为 test 的机器。

docker-machine create --driver virtualbox test

–driver:指定用来创建机器的驱动类型,这里是 virtualbox。
3、查看机器的 ip

docker-machine ip test

4、停止机器

docker-machine stop test

5、启动机器

docker-machine start test

6、进入机器

docker-machine ssh test

docker-machine 命令参数说明
config:查看当前激活状态 Docker 主机的连接信息。

creat:创建 Docker 主机

env:显示连接到某个主机需要的环境变量

inspect: 以 json 格式输出指定Docker的详细信息

ip: 获取指定 Docker 主机的地址

kill: 直接杀死指定的 Docker 主机

ls: 列出所有的管理主机

provision: 重新配置指定主机

regenerate-certs: 为某个主机重新生成 TLS 信息

restart: 重启指定的主机

rm: 删除某台 Docker 主机,对应的虚拟机也会被删除

ssh: 通过 SSH 连接到主机上,执行命令

scp: 在 Docker 主机之间以及 Docker 主机和本地主机之间通过 scp 远程复制数据

mount: 使用 SSHFS 从计算机装载或卸载目录

start: 启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动

status: 获取指定 Docker 主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等

stop: 停止一个指定的 Docker 主机

upgrade: 将一个指定主机的 Docker 版本更新为最新

url: 获取指定 Docker 主机的监听 URL

version: 显示 Docker Machine 的版本或者主机 Docker 版本

help: 显示帮助信息

九,安装常用镜像

1.安装 CentOS

1.查找镜像
访问 CentOS 镜像库地址:https://hub.docker.com/_/centos?tab=tags&page=1。
2.拉取指定版本的 CentOS 镜像

docker pull centos:centos7

3.查看本地镜像

docker images

4、运行容器,并且可以通过 exec 命令进入 CentOS 容器。

docker run -itd --name centos-test centos:centos7

5、安装成功
可以通过 docker ps 命令查看容器的运行信息

2.安装 MySQL

1、查看可用的 MySQL 版本
访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags

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

docker pull mysql:latest

3、查看本地镜像
使用以下命令来查看是否已安装了 mysql:

docker images

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

docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql

参数说明:

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

MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
5、安装成功
通过 docker ps 命令查看是否安装成功:

#进入容器
docker exec -it mysql /bin/bash

#登录mysql
mysql -h localhost -u root -p
输入密码后进入mysql

如果连接 MySql报2059 使用下面的命令重置密码

ALTER  USER  'root'  IDENTIFIED  WITH  mysql_native_password  BY  '1234567';

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

3.安装 Redis

1、查看可用的 Redis 版本
访问 Redis 镜像库地址: https://hub.docker.com/_/redis?tab=tags
2、取最新版的 Redis 镜像
这里我们拉取官方的最新版本的镜像:

docker pull redis:latest

3、查看本地镜像
使用以下命令来查看是否已安装了 redis:

docker images

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

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

-p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务
5、安装成功
最后我们可以通过 docker ps 命令查看容器的运行信息

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

#进入容器
docker exec -it redis-test /bin/bash
#查看redis
redis-cli

4.安装 MongoDB

1、查看可用的 MongoDB 版本
访问 MongoDB 镜像库地址: https://hub.docker.com/_/mongo?tab=tags&page=1
2、取最新版的 MongoDB 镜像
这里我们拉取官方的最新版本的镜像:

docker pull mongo:latest

3、查看本地镜像
使用以下命令来查看是否已安装了 mongo:

docker images

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

docker run -itd --name mongo -p 27017:27017 mongo --auth

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

–auth:需要密码才能访问容器服务。

5、安装成功
最后我们可以通过 docker ps 命令查看容器的运行信息

6.配置mongodb
使用以下命令添加用户和设置密码,并且尝试连接。

#进入容器
docker exec -it mongo mongo admin
# MongoDB 6.0 及以上版本使用以下命令:
docker exec -it mongo mongosh admin
# 创建一个名为 admin,密码为 123456 的用户。
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
db.auth('admin', '123456')

学习自cainiaojc
更详细信息请看连接处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值