Docker容器快速入门看这篇就够了!

目录

一、初识Docker

1.1 什么是Docker?

1.2 Docker和虚拟机区别

1.3 Docker的基本概念

二、Docker镜像的操作

三、Docker容器命令

 四、数据卷

五、宿主机文件系统

 六、自定义镜像

6.1 什么DockerFile?

七、DockerCompose集群


一、初识Docker

1.1 什么是Docker?

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

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

  • docker将应用的函数库、依赖、配置和应用打包在一起
  • docker将每个应用放到一个隔离容器中运行,使用沙箱技术避免互相干扰

Docker如何解决开发、测试、生产环境有差异的问题?

  • docker将用户程序和所要调用的系统函数库一起打包。
  • docker运行直接基于打包的库函数,借助Linux内核来运行。

Docker就是一个快速交付应用、运行应用的技术。

1.2 Docker和虚拟机区别

1、启动速度不同

docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。

2、性能损耗不同

docker 需要的资源更少,docker 在操作系统级别进行虚拟化,docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化。

1.3 Docker的基本概念

镜像(Image):docker将应用程序及所需的依赖、函数库、配置等文件打包在一起。

容器(Container):镜像中的应用程序运行后形成的进程。docker对容器做隔离。

DockerHub:docker镜像托管平台

docker架构:

服务端是docker守护进程,负责处理docker指令、管理镜像和容器。

客户端是通过命令或RestAPI向docker服务端发送指令。

# 构建docker守护进程镜像
docker build 
# 从dockerhub拉取镜像
docker pull
# 运行镜像
docker run

 1.4 Docker安装

Docker CE 支持 64 位版本 CentOS7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。对于刚入门的初级Java开发工程师CentOS6升级到CentOS7版本比较麻烦,建议直接CentOS6彻底删除,重新安装CentOS7版本。

检查并卸载旧版本的docker:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

 需要虚拟机联网,安装yum-util工具

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

 更新本地镜像源

# 设置docker镜像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

安装docker社区版

yum install -y docker-ce

安装完docker后,在启动docker需要修改防火墙配置的应用端口。在个人虚拟机上直接关闭防火墙,在企业中不能这么做。

# 关闭防火墙
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
# 查看防火墙状态
systemctl status firewalld

启动docker服务

systemctl start docker

查看docker

systemctl status docker  # 激活状态active (running)
docker -v  # docker的版本

 停止docker服务

systemctl stop docker

重启docker服务

systemctl restart docker

由于docker官网镜像相对较慢,设置国内的镜像,如:阿里云、腾讯云、华为云等。

https://cr.console.aliyun.com/cn-shanghai/instances/mirrors

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

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

Docker容器快速入门看这篇就够了!_第1张图片

二、Docker镜像命令

我们可以发现我们常说的“ubuntu”镜像其实不是一个镜像名称,而是代表了一个名为ubuntu的Repository,

同时在这个 Repository下面有一系列打了tagImage,Image的标记是一个GUID,为了方便也可以通过Repository:tag来引用。

Registry中镜像是通过Repository来组织的,而每个Repository又包含了若干个Image

 常见镜像操作命令

Docker容器快速入门看这篇就够了!_第2张图片

 学docker的命令不需要特别记忆这些命令,关键是正确使用帮助文档

docker --help

Docker容器快速入门看这篇就够了!_第3张图片

需求1:从dockerhub拉取一个nginx镜像。

1. 去镜像仓库搜索nginx镜像

Docker容器快速入门看这篇就够了!_第4张图片

2. 拉取需要的镜像。

docker pull nginx

3. 查看拉取的镜像。

docker images

需求2:用docker save 将nginx 镜像导出到磁盘,再通过load加载回来。

1. 帮助命令

docker save --help

2. 导出到本地

Docker容器快速入门看这篇就够了!_第5张图片

 3. 从磁盘导入

删除nginx镜像

docker rmi nginx:latest

加载镜像到本地 

docker load -i nginx.tar

Docker容器快速入门看这篇就够了!_第6张图片

需求3:到dockerhub搜索并拉取redis镜像。

1. 搜索dockerhub搜索redis镜像。

Docker容器快速入门看这篇就够了!_第7张图片

2. 拉取镜像。

docker pull redis

3. 查看redis镜像的名称和版本。

docker images

4. 打包redis镜像

docker save -o redis.tar redis:latest

5. 删除本地的redis镜像

 docker rmi redis:latest

6. 重新加载redis。

docker load -i redis.tar

三、Docker容器命令

Docker容器快速入门看这篇就够了!_第8张图片

案例1:创建并运行一个nginx容器。

 dockerhub查看nginx容器运行命令。

docker run \
    --name spnginx \  # nginx名字
    -p 8080:80 \  # 宿主机端口:容器端口
    -d nginx  # 后台运行
docker ps   # 查看容器运行进程

 通过浏览器外部访问nginx效果

Docker容器快速入门看这篇就够了!_第9张图片

docker logs spnginx  # 查看日志
docker logs -f spnginx   # 持续跟踪日志

Docker容器快速入门看这篇就够了!_第10张图片

案例2:进入nginx容器,修改html内容,添加提示内容。

# 进入容器和终端交互
docker exec -it spnginx bash

 从官网获取静态网页的目录地址

FROM nginx
COPY static-html-directory /usr/share/nginx/html
# Place this file in the same directory as your directory of content ("static-html-directory")

  修改html的内容,这是不推荐的。vi命令在容器内不存在。

sed -i 's#Welcome to nginx#计算机学院#g' index.html
sed -i 's###g' index.html

通过浏览器外部访问容器内nginx的静态文件

Docker容器快速入门看这篇就够了!_第11张图片

docker stop spnginx # 停止容器
docker ps -a   # 查看所有容器包括挂掉的容器
docker start spnginx   # 启动容器
docker pause spnginx   # 暂停容器
docker unpause spnginx # 恢复容器
docker rm -f spnginx  # 强制运行中的删除容器
docker rm myNginx   # 正常删除容器

案例3:创建并运行一个redis容器,并支持数据持久化。进入redis容器,执行redis-cli客户端命令,存入num = 123456。

docker run \
    --name m-h-redis \  # redis容器名字
    -d redis redis-server \  # 后台运行
    --appendonly yes   # AOF持久化
docker ps  # 查看运行的容器
docker exec -it m-h-redis bash  # 进入redis客户端交互
redis-cli   # 连接客户端
----------------------------------------------------
docker exec -it m-h-redis redis-cli # 直接进入redis客户端交互

 Docker容器快速入门看这篇就够了!_第12张图片

 四、数据卷

     容器和数据耦合度高

  1.  不便于修改容器内的数据。
  2. 对容器内的数据进行修改是不可复用的。
  3.  维护容器及容器内的数据是困难的。

Docker容器快速入门看这篇就够了!_第13张图片

数据卷的常用命令

docker volume create html  # 创建数据卷
 docker volume inspect html  # 查看数据卷挂载的位置
docker volume ls  # 查看所有的数据卷
docker volume rm html  # 删除数据卷
docker volume prune -f html  # 删除数据卷

案例1:创建nginx容器,修改容器内html目录内的index.html的内容。

1创建容器并挂载数据卷到容器内的html目录。

docker run --name m-h-nginx -p 8080:80 -v html:/usr/share/nginx/html -d nginx

进入html数据卷所在位置,并修改html的内容。

docker volume inspect html
cd /var/lib/docker/volumes/html/_data
vi index.html

通过浏览器的外部访问数据卷关联容器。 

Docker容器快速入门看这篇就够了!_第14张图片

数据卷挂载通过-v html:/usr/share/nginx/html命令参数进行创建,如果容器中没有可运行的数据卷就会自动创建。

案例2:创建并运行mysql容器,将宿主机目录直接挂载到容器

通过filezilla文件传输工具上传mysql.tar文件包到虚拟机/usr/etc

Docker容器快速入门看这篇就够了!_第15张图片

 加载mysql.tar镜像

docker load -i mysql.tar  # 加载mysql镜像
docker images   # 查看镜像

 创建/usr/etc/mysql/conf配置文件夹

创建/usr/etc/mysql/data数据文件夹

mkdir -p /usr/etc/mysql/conf # 多级目录创建
mkdir -p /usr/etc/mysql/data  # 多级目录创建

通过filezilla文件传输工具上传hmy.cnf到/usr/etc/mysql/conf

Docker容器快速入门看这篇就够了!_第16张图片

 创建并运行mysql容器

docker run \
  --name mysql \ 
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  -v /usr/etc/mysql/conf/hmy.cnf:etc/mysql/conf.d/hmy.cnf \
  -v /usr/etc/mysql/data:/var/lib/mysql \
  -d \
  mysql:5.7.25

 启动mysql容器

docker start mysql  # 启动mysql容器
doker ps      # 查看容器运行

在navicat连接可视化工具表面连接成功

Docker容器快速入门看这篇就够了!_第17张图片

 数据卷和宿主机文件系统的对比

1. 数据卷挂载耦合度低,由docker管理目录,但是相对不好找。

2. 目录挂载耦合度较高,由自己管理目录,目录容易查找。

 五、自定义镜像

镜像就是将应用程序及所需要的系统函数库、环境、配置和依赖打包而成。

什么DockerFile

Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。 Dockerfile 是一个文本文档,其中包含了用户创建镜像的所有命令和说明。

1. 创建空文件夹。

mkdir docker-demo

2. 上传docker-demo.jar、dockerfile文件、jdk8.tar.gz到docker-demo文件夹。

Docker容器快速入门看这篇就够了!_第18张图片

 3. 构建镜像。

docker build -t javaweb:1.0 .

4. 运行

 docker run --name web -p 8090:8090 -d javaweb:1.0

七、DockerCompose集群

什么是DockerCompose?

Docker Compose 是用来做Docker 的多容器控制,是一个用来把 Docker 自动化的东西。有了 Docker Compose 你可以把所有繁复的 Docker 操作全都一条命令,自动化的完成。

DockerCompose安装

1. 上传docker-compose

Docker容器快速入门看这篇就够了!_第19张图片

 2. 修改文件权限

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

3. 自动补全

echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

案例:将cloud-demo微服务集群部署到DockerCompose

你可能感兴趣的:(Linux,docker,linux)