Docker简介和安装

Docker简介

Docker是一个开发、运输和运行应用程序的开放平台。Docker可以将应用程序和软件应用环境分离,以便快速的交付软件。使用Docker,可以像管理软件那样管理运行环境,并能够利用Docker提供的功能来快速的发布、测试及部署代码,减少开发环境和部署环境配置不一致的问题。

简而言之:Docker是一种可以在同样硬件上实现不同环境的软件,解决了“这段代码在我的机器上没问题呀”的甩锅问题。

Docker引擎

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

其中包括以下组件:

1.服务器:一个长时间运行的程序,称为守护程序进程。

2.REST API:指定客户端程序和服务端程序进行交互的接口。

3.CLI:命令行界面客户端。

CLI使用Docker REST API通过脚本或者CLI命令控制Docker守护程序或者与Docker守护程序进行交互。

Docker 架构

前面说过Docker是一个CS架构的应用程序。Docker客户端和Docker服务端进行通信,后者负责构建、运行和分发Docker容器。

Docker的客户端和服务端可以在同一台机器上运行,也可以将Docker客户端连接到远程Docker服务端。

Docker客户端和服务端通过REST API进行通信。

Docker 容器通过 Docker 镜像来创建。

Docker服务端

Docker服务端(Docker守护进程)是用于接收Docker API请求并管理Docker对象,如镜像(images)、容器(containner)、网络(network)和数据卷(volumes)等。

Docker应用程序还可以与其他守护程序通信以管理Docker服务。

Docker客户端

Docker客户端是用户与Docker进行直接交互的地方,当使用如Docker run这些命令的时候,客户端会将这些命令发送到服务端进行执行。Docker客户端可以与多个守护进程进行通信。

Docker 内部

要理解 Docker 内部构建,需要理解以下三种部件:

  • Docker 镜像 - Docker images
  • Docker 仓库 - Docker registeries
  • Docker 容器 - Docker containers

Docker 镜像

Docker 镜像(Image),就相当于是一个 root 文件系统。

Docker 仓库

仓库可看着一个代码控制中心,用来保存镜像。

Docker 容器

Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

Docker基于CentOS安装

安装方式使用yum安装Docker Engine-Community(社区版)

卸载旧版本

sudo yum remove docker  docker-common docker-selinux docker-engine   

必要系统工具

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

设置yum源

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

查看所有仓库中所有Docker版本

yum list docker-ce --showduplicates | sort -r

安装Docker

sudo yum -y install docker-ce

启动Docker

sudo service docker start

加入开机启动

sudo systemctl enable docker

验证安装是否成功

docker version

有client和service两部分表示docker安装启动都成功了

配置阿里云镜像加速器

  • 注册属于自己的阿里云账户
  • 获得加速器地址链接(https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors)
    • 登录阿里云开发者平台
    • 获取加速器地址
  • 配置本机Docker运行镜像加速器
    • 输入创建配置文件 vim /etc/docker/daemon.json
    • 把对应的加速器地址复制
  • 重启
    • sudo systemctl daemon-reload
    • sudo systemctl restart docker
    • service docker restart

输入验证是否配置成功

docker info 

可以观察最下面是否有这个Registry Mirrors: 你刚才配置的阿里云镜像加速地址,有就配置成功。

运行Docker 的测试

sudo docker run hello-world

Docker镜像操作

查看镜像

docker images

  • REPOSITORY:镜像所在的仓库名称

  • TAG:镜像标签

  • IMAGE ID:镜像ID

  • CREATED:镜像的创建日期(不是获取该镜像的日期)

  • SIZE:镜像大小

这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

搜索镜像

docker search 镜像名称

拉取镜像

docker pull 镜像名称

删除镜像

  • 删除指定镜像
docker rmi $IMAGE_ID

  • 删除所有镜像
docker rmi `docker images -q`

定制镜像Dockerfile

镜像是容器的基础,每次执行 docker run 的时候都会指定哪个镜像作为容器运行的基础。我们大部分所使用的都是来自于 Docker Hub 的镜像。直接使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,我们就需要定制这些镜像。

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

Docker容器操作

查看容器

  • 查看正在运行的容器
docker ps

  • 查看所有的容器(启动过的历史容器)
docker ps -a

  • 查看最后一次运行的容器
docker ps -l

  • 查看停止的容器
docker ps -f status=exited

创建与启动容器

  • 创建容器命令
    • docker run
  • 参数说明
    • -i:表示运行容器
    • -t:表示容器启动后会进入容器命令行(交互式)。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    • –name :为创建的容器命名。
    • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

交互式容器

交互式容器类似于另开窗口,比如windows下启动redis-server.exe会弹出一个黑框窗口,当我关闭这个黑框的时候,服务也就停止了。

  • 创建一个交互式容器

    docker run -it --name=mycentos centos /bin/bash  (进入容器)
    
    

  • 停止刚创建的容器

    docker stop mycentos
    
    
  • 启动容器

    docker start mycentos
    
    

守护式容器

如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器(容器名称不能重复)

  • 创建守护式容器

    docker run -di --name=mycentos2 centos
    
    
  • 登录守护式容器

    docker exec -it mycentos2 /bin/bash
    
    
  • exit退出时,容器不会停止

文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或目录 容器名称:容器目录

也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。需在启动的时候指定挂载目录

创建容器 添加-v参数 后边为 宿主机目录:容器目录,如下:

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos

查看容器IP地址

我们可以通过以下命令查看容器运行的各种数据

docker inspect mycentos2

也可以直接执行下面的命令直接输出IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2

删除容器

  • 删除指定的停止的容器
docker rm $CONTAINER_ID/NAME

  • 删除未停止的容器
docker rm -f $CONTAINER_ID/NAME

  • 删除所有容器
docker rm `docker ps -a -q`

进入容器

docker exec -it $CONTAINER_ID/NAME bath (/bin/bash) 

Docker常用安装

:以下安装的应用都没有挂载目录,如需挂载须在启动的时候挂载目录

安装tomcat

  • docker hub上面查找tomcat镜像

    docker search tomcat
    
    
  • 从docker hub上拉取tomcat镜像到本地(https://hub.docker.com/_/tomcat?tab=tags)

    docker pull tomcat
    
    

  • 查看是否拉取到tomcat

    docker images
    
    
  • 使用tomcat镜像创建容器(运行镜像)

    docker run -di --name mytomcat -p 8080:8080 tomcat
    
    
  • 通过浏览器访问

安装Mysql

  • docker hub上面查找mysql镜像

    docker search mysql
    
    
  • 从docker hub上拉取mysql镜像到本地(https://hub.docker.com/_/mysql?tab=tags)

    docker pull mysql
    
    

  • 查看是否拉取到mysql

    docker images
    
    

  • 使用mysql镜像创建容器(运行镜像)

    docker run -di --name mysql3 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    
    
    • -p 代表端口映射,格式为 宿主机映射端口:容器运行端口

    • -e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密

  • 进入mysql容器

    docker exec -it mysql bash
    
    
  • 访问mysql

    mysql -uroot -p
    
    
  • 遇到的问题

    我在执行上面步骤的时候出现了mysql闪退的情况,启动不到10秒就自动关闭了,查了很多资料也没发现是什么原因,打印日志如下:

  • 解决方案

    docker start mysql
    
    
  • 重启之后进入容器中输入密码提示密码错误

我们之前创建容器的时候就设置了密码为123456,为什么输入时却报错呢?当我查了很多仍一无所获时,无力的在哪里点击enter键,结果突然进去了 ,没错,就是没输入密码。

这里就不做原因说明了,因为我也不清楚,但是可以看看这篇文章来解决

docker部署mysql 时root 用户无法登录问题和解决办法

  • 远程连接Navicat

    • 对远程连接进行授权
    GRANT ALL ON *.* TO 'root'@'%';
    
    
    • 更改密码的加密规则
     ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
    
    
    • 更改root的密码
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 
    
    
    • 刷新权限
    flush privileges;
    
    
  • 连接Navicat

You are not allowed to create a user with GRANT 解决方案

安装Nginx

  • 拉取Nginx镜像

    docker pull nginx
    
    
  • 创建Nginx容器

    docker run -di --name mynginx -p 8888:80 nginx
    
    
  • 进入容器

    docker exec -it mynginx bash
    
    
  • 启动

    /usr/sbin/nginx  (回车)
    
    

安装Redis

  • 拉取Redis镜像

    docker pull redis
    
    
  • 创建Redis容器

    docker run -di --name myredis -p 63379:6379 redis
    
    
  • Windows客户端测试

    redis-cli -h 39.108.154.245 
    
    

参考

https://www.funtl.com/zh/docs-docker/

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪了个王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值