docker与应用容器化

总览

一、docker简介

1.定义:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2.组成:
  • dockerClient客户端
  • Docker Daemon守护进程
  • Docker Image镜像
  • DockerContainer容器
3.特点:
  • Fast, consistent delivery of your applications
  • Responsive deploymentand scaling
  • Running more workloads on the same hardware

二、安装docker

1.环境

Ubuntu 19.10
版本

2. 配置 Docker 的 apt 源
2.1 安装包,允许 apt 命令 HTTPS 访问 Docker 源

执行如下命令:

sudo apt-get install \apt-transport-https \ca-certificates \curl \software-properties-common

安装

2.2 添加 Docker 官方的 GPG

执行如下命令:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

添加

2.3 将 Docker 的源添加到 /etc/apt/sources.list

执行如下命令:

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

添加

2.4 安装Docker:

执行如下命令:

sudo apt-get update
sudo apt-get install -y docker-ce

安装失败
注:连接不上docker库解决办法:
手动加入源,执行如下命令:

cd /etc/apt/sources.list.d
sudo vi docker.list

加入以下信息:

deb https://download.docker.com/linux/ubuntu zesty edge

更新apt-get,并进行安装:

sudo apt update
sudo apt install docker-ce

在这里插入图片描述

2.5 免sudo配置

执行如下命令:

sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker

在这里插入图片描述

2.6 检查 docker 安装

执行如下命令:

docker version

在这里插入图片描述

2.7 运行第一个容器:

执行如下命令:

docker run hello-world

在这里插入图片描述

三、Docker 基本操作

3.1 运行镜像

执行如下命令:

docker run -it ubuntu bash

运行镜像

3.2 显示本地镜像库内容

命令:

docker images

镜像库

3.3 获得帮助

命令:

docker help

在这里插入图片描述

3.4 显示运行中容器

命令:

docker ps

在这里插入图片描述

3.5 显示所有容器(包含已中止)

命令:

docker ps -a

在这里插入图片描述

3.6 继续运行原容器并进入

命令:

docker restart boring_shockley
docker ps
docker attach boring_shockley

在这里插入图片描述

3.7 Docker客户端常用指令总结:
指令说明
docker images列出镜像
docker search搜索镜像
docker pull拉取镜像
docker build构建镜像
docker rmi删除镜像
docker run创建并启动容器
docker ps列出容器
docker exec执行容器
docker stop停止容器
docker start启动容器
docker rm删除容器

四、MySQL与容器化

4.1 拉取MySQL 镜像

命令:

docker pull mysql:5.7
docker images

在这里插入图片描述在这里插入图片描述
注:
Repository: mysql
Tag: 5.7
Image ID: 1e4405fe1ea9

4.2 远程仓库

官方仓库: https://hub.docker.com/_/mysql/
格式:https://registry/user/repo
仓库中保存若干版本镜像,每个镜像对应一个 tag
默认的 tag 是 lastest
每个镜像有 github 上 Dockfile 生成

4.3 MySQL 容器构建文件 Dockerfile

地址:https://github.com/docker-library/mysql/blob/master/5.7/Dockerfile

4.4 Dockerfile 常见指令(按指令出现顺序)
  • FROM base_image
  • RUN shell_commands
  • ENV env_vars
  • VOLUME path
  • COPY source destination
  • ENTRYPOINT [“executable”,”parm1”, ”parm2”,…]
  • EXPOSE ports
  • CMD [“executable”,”parm1”, ”parm2”,…]
    注:
指令说明
FROM指定基础镜像
MAINTAINER指定镜像维护者信息
RUN用于执行指定脚本命令
CMD指定启动容器时执行的命令
EXPOSE指定容器暴露的端口
ENV指定环境变量
ADD将文件从宿主机复制到容器指定位置,同时对压缩文件有自动解压功能
COPY将文件从宿主机复制到容器指定位置
ENTRPOINT设置容器启动时需要运行的命令
WORKDIR为后续的如RUN、CMD、ENTRYPOINT、COPY、ADD指定工作目录
4.5 构建docker镜像练习

(1)创建dockerfile文件
命令:

mkdir mydock && cd mydock
gedit dockerfile

在这里插入图片描述
(2)编辑dockerfile文件:
输入以下内容:

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]

(3)构建镜像:
命令:

sudo docker build . -t hello

在这里插入图片描述
(4)运行镜像
命令:

docker run -it --rm hello -H

在这里插入图片描述

4.6 使用MySQL容器

(1)启动服务器
命令:

sudo docker run -p 3308:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

在这里插入图片描述
在这里插入图片描述
(2)启动 MySQL 客户端
命令:

docker run -it --net host mysql:5.7 "sh"
mysql -h127.0.0.1 -P3308 -uroot -proot

在这里插入图片描述
(3)数据库文件在哪里?
命令:

docker exec -it mysql2 bash
ls /var/lib/mysql

在这里插入图片描述
(4)Dockerfile 的 VOLUME /var/lib/mysql 的含义
命令:

docker container prune -f		//删除删除所有已经停止的容器
docker volume prune –f		//修剪卷
docker volume ls

在这里插入图片描述
注:每次启动 mysql 容器,docker 创建一个文件卷挂载在容器内/var/lib/mysql位置。这个卷在主机(host)的 /var/lib/docker/volumes/ 目录下
(5)创建卷并挂载
命令:

docker rm $(docker ps -a -q) -f -v
docker volume create mydb
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7

在这里插入图片描述
注:这里没有暴露端口到主机,将自己定义的数据卷挂载在 /var/lib/mysql
(6)启动客户端容器链接服务器
命令:

docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash
mysql -hmysql -P3306 -uroot -proot

在这里插入图片描述
注:这里使用了 --link 连接两个容器,客户端容器内可以使用 mysql 这个别名访问服务器 。
(7)挂载现有数据库:
命令:

docker run -v "$PWD/data":/var/lib/mysql --user 1000:1000 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

在这里插入图片描述在这里插入图片描述
(8)修改容器配置
命令:

docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

在这里插入图片描述

4.7 Docker compose 与多容器应用自动化部署

(1)下载docker-compose(容器编排的原型)
命令:

sudo apt install docker-compose

(2)编写:stack.yml
命令:

 mkdir comptest && cd comptest
 gedit stack.yml

内容:

version: '3.1'
services:
  db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

(3)启动服务:
命令:

docker-compose -f stack.yml up

在这里插入图片描述
在这里插入图片描述

五、Docker网络

5.1 容器默认使用网络:

Docker0(桥接)

5.2 容器支持网络与类型
  • bridge (本机内网络)
  • host (主机网卡)
  • overlay (跨主机网络)
  • none
  • Custom(网络插件)
5.3 管理容器网络

命令:

docker network ls

在这里插入图片描述

5.4 用户定义网络与bridge的区别?
  • 灵活的构建容器之间的通讯网络
  • 自定义网络自带 DNS
    – 同一自定义网络上的容器,可以通过容器名访问
    – Bridge 网络上容器只能通过 IP 访问
  • 遗留的做法:
    –使用 link 将被访问容器的域名和环境变量导入容器
  • 容器与自定义网络之间
    – 自由地连接或断开
  • 通过配置 iptable 配置网桥
5.5 备制支持 ifconfig 和 ping 命令的 ubuntu 容器

命令:

~]# docker run --name unet -it --rm ubuntu bash
root@48a255a95c37:/# apt-get update
…
root@48a255a95c37:/# apt-get install net-tools
root@48a255a95c37:/# apt-get install iputils-ping -y
root@48a255a95c37:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
…
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
…
root@48a255a95c37:/# ping <your host ip>
…

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.6 启动另一个命令窗口,由容器制作镜像

命令:

docker commit unet ubuntu:net

在这里插入图片描述

5.7 Docker 默认网络
  • 容器通过桥(docker0)相连
  • IP-Forward通过NAT访问外面
  • 端口映射使外面访问容器
    在这里插入图片描述
5.8 创建自定义网络

命令:

docker network create mynet

在这里插入图片描述

5.9 在两个窗口创建 u1,u2 容器网络

使用以下命令:

docker run --name u1 -it -p 8080:80 --net mynet --rm ubuntu:net bash
docker run --name u2 --net mynet -it --rm ubuntu:net bash
docker info u1
docker network connect bridge u1
docker network disconnect mynet u1

在这里插入图片描述
在这里插入图片描述
注:docker info : 显示 Docker 系统信息,包括镜像和容器数。
在这里插入图片描述
没有docker info u1这样的命令。

六、Docker 仓库(Registry)

6.1 容器仓库在 cncf 技术栈中属于供给层

(1)公共容器仓库服务

  • Docker hub https://hub.docker.com/
  • Amazon ECR
  • … …
  • 几乎所有容器云服务商都免费提供此服务!

(2)私有容器仓库工具

  • Docker Registry 2
  • Vmware Harbor
  • Sonatype Nexus 3
6.2 搭建私有容器仓库

(1)官方指南:
https://docker.github.io/registry/deploying/
仅需要实验到 Stop a local registry

  1. start the registry container
    命令:
docker run -d -p 5000:5000 --restart=always --name registry registry:2

在这里插入图片描述

  1. Copy an image from Docker Hub to your registry
    命令:
docker pull ubuntu:16.04		//Pull the ubuntu:16.04 image from Docker Hub.
docker tag ubuntu:16.04 localhost:5000/my-ubuntu			//Tag the image as localhost:5000/my-ubuntu.
docker push localhost:5000/my-ubuntu		//Push the image to the local registry running at localhost:5000:
docker image remove ubuntu:16.04			
docker image remove localhost:5000/my-ubuntu		//Remove the locally-cached ubuntu:16.04 and localhost:5000/my-ubuntu images
docker pull localhost:5000/my-ubuntu		//Pull the localhost:5000/my-ubuntu image from your local registry.


在这里插入图片描述
在这里插入图片描述
3. Stop a local registry

  • To stop the registry, use the same docker container stop command as with any other container.
    命令:
docker container stop registry
  • To remove the container, use docker container rm.
    命令:
docker container stop registry && docker container rm -v registry

在这里插入图片描述
(2)Docker Registry 开源代码:https://github.com/docker/distribution

6.3 阿里云容器镜像服务(免费)实践

(1)访问 https://cr.console.aliyun.com
(2)用淘宝或注册一个账号
在这里插入图片描述
(3)选择“容器镜像服务”
在这里插入图片描述
(4)进行常用仓库操作:如上传 hello-world 镜像

  • 登陆 docker login --username= registry.cn-shenzhen.aliyuncs.com
    在这里插入图片描述
  • 标签 docker tag hello-world registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world
    在这里插入图片描述
  • 上传 docker push registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world
    在这里插入图片描述
  • 下载 docker pull registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world
    在这里插入图片描述
  • 标签 docker tag registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world hello-world
    在这里插入图片描述
  • 删除 docker rmi registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world
    在这里插入图片描述
  • 运行 docker run --rm hello-world
    在这里插入图片描述
  • 退出 docker logout registry.cn-shenzhen.aliyuncs.com
    在这里插入图片描述

七、容器监控与与日志

7.1 检查docker的状态

命令:

docker info 
docker info --format {{.ServerVersion}}

在这里插入图片描述

7.2 查看容器内进程

命令:

docker top
docker stats

在这里插入图片描述
在这里插入图片描述
注:docker top :查看容器中运行的进程信息,支持 ps 命令参数。
docker stats:Display a live stream of container(s) resource usage statistics

7.3 容器详细信息

命令:

docker inspect
docker inspect -f '{{.NetworkSettings.IPAddress}}' 084f46eddf33

在这里插入图片描述
注:
在这里插入图片描述

7.4 容器日志查看

命令:

docker logs 

注:
在这里插入图片描述
测试:
在这里插入图片描述

八、docker图形化管理工具

8.1 web图形化管理工具

Portainer

8.2 单节点运行

命令:

sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

在这里插入图片描述
在这里插入图片描述

8.3 Unix socket

关于/var/run/docker.sock,查看 http://www.cnblogs.com/fundebug/p/6723464.html

8.4 使用 Portainer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值