学习Docker,有这一篇就够啦! 1

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
简介: 学习Docker,有这一篇就够啦!

1.Docker容器化技术简介

1.1什么是Docker?

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

使用go语言编写,在LCX(linux容器)基础上进行封装

三点

快速部署应用启动

实现虚拟化,完整资源隔离

一次编写,四处运行

1.2.为什么要用docker?

提供一次性的环境,加入需要安装mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行

快速动态扩容,使用docker部署了一个应用,可以制成镜像,通过docker快速启动

组件微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用

更好的资源隔离和共享

2.Linux Centos7安装Docker

2.1.安装Docker

安装环境:Centos7

安装条件:docker官方至少要求3.8,建议3.10以上

查看centos内核版本

uname -a



7673dbd22c974f09adda47b1aab0e35e.jpg

Docker版本


docker EE 企业版本

docker CE 社区版本

安装前准备


关闭防火墙

systemctl stop firewalld

关闭selinux

vi /etc/selinux/config —>将SELINUX=disabled

安装wget命令


挂载磁盘,yum -y install wget

下载阿里云docker社区版yum源


cd /etc/yum.repos.d/ 进入到yum源的路径

wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

重新构件yum源


yum clean all

yum makecache

查看docker安装包


yum list | grep docker

如果出现如下错误,则需安装contain-SElinux包

4f5c3a9bdc57424aaeac34e429c457cb.jpg



wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo


yum clean all


yum update


安装docker ce社区版


yum -y install docker-ce.x86_64

设置开机自启


systemctl enable docker

更新xfsprogs


yum -y update xfsprogs

启动docker容器


systemctl start docker

查看docker版本


docker version

查看docker详细信息


docker info

2eaf5c17a40f4376874ebecb3b79b02c.jpg


2.2.配置阿里云镜像加速

新建文件:vi /etc/docker/daemon.json

编辑文件

{
  "registry-mirrors": ["https://6j96rs65.mirror.aliyuncs.com"]
}

重启docker

systemctl daemon-reload

systemctl restart docker

3.Docker镜像的搜索下载以及查看删除

3.1.什么是镜像?

镜像(Mirroring)是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。可以把许多文件做成一个镜像文件,与GHOST等程序放在一个盘里用GHOST等软件打开后,又恢复成许多文件,RAID 1和RAID 10使用的就是镜像。常见的镜像文件格式有ISO、BIN、IMG、TAO、DAO、CIF、FCD。

3.2.查看本地镜像

docker images

42619953e5204392b8d817941d169224.jpg


3.3.搜索镜像

docker search centos

f2bc798415074211886b0b719781e966.jpg


3.4.搜索镜像并过滤是官方的

docker search --filter "is-official=true" centos


dc389f90d6ea46f78b3c7e231944659c.jpg

3.5.搜索镜像并过滤大于10颗星的

docker search --filter stars=10 centos

0809d32e1104470f8db804608c9c521f.jpg

3.6.下载centos7镜像

docker pull centos:7

b0093bb219bc4f4790b48e9ea0f652a9.jpg

3.7.修改本地镜像名字

docker tag mycentos:1 centos:7 

3.8.本地镜像的删除

docker rmi centos:7

3.9.Docker的体系结构之镜像与容器

  • 一个镜像可以启动无数台容器
  • 容器与容器之间的操作互不影响,处于隔离的环境

4.Docker核心基础之容器的构建

  • 构建容器:docker run -itd --name=mycentos centos:7
  • -i:表示以交互模式运行容器(让容器的标准输入保持打开)
  • -d:表示后台运行容器,并返回容器ID-t:为容器重新分配一个伪输入终端
  • –name:为容器指定名称
  • 查看本地所有容器:docker ps -a
  • 查看本地正在运行的容器:docker ps
  • 停止容器:docker stop CONTAINER_ID/CONTAINER_NAME
  • 一次性停止所有容器:docker stop $(docker ps -a -q)
  • 启动容器:docker start CONTAINER_ID/CONTAINER_NAME
  • 重启容器:docker restart CONTAINER_ID/CONTAINER_NAME
  • 删除容器:docker rm CONTAINER_ID/CONTAINER_NAME
  • 强制删除容器:docker rm -f CONTINAER_ID/CONTINAER_NAME
  • 查看容器详细信息:docker inspect CONTIANER_ID/CONTINAER_NAME
  • 进入容器:docker exec -it CONTINAER_ID/CONTINAER_NAME /bin/bash

5.Docker容器的文件复制与挂载

  • 从宿主机复制到容器:docker cp 宿主机本地绝对路径 容器名字/ID:容器绝对路径
  • docker cp /root/1.txt mycentos:/root/
  • 从容器复制到宿主机:docker cp 容器ID/NAME:容器绝对路径 宿主机绝对路径
  • docker cp mycentos:/root/2.txt /root/
  • 宿主机文件夹挂载到容器里:docker run -itd -v 宿主机路径:容器路径 --name 容器名称 镜像ID
  • docker run -itd -v /root/test/:root/ --name=centos7 centos:7

6.Docker核心自定义镜像

6.1.构建镜像的两种方法

基于Docker Commit制作镜像

基于DockerFile制作镜像,DockerFile方式为主流的制作镜像方式

6.2.Commit构件自定义镜像

启动容器:docker run -itd mycentos

进入容器:docker exec -it mycentos /bin/bash

安装ifconfig命令:yum -y install net-tools

重启容器:docker restart mycentos

删除容器:docker rm mycentos

构件镜像:docker commit -a “作者” -m “描述” 原CONTAINER_ID 新容器image

docker commit -a “lixiang” -m “ifconfig命令” 180176be1b4c centos7:v1

-a:指定作者

-m:描述

产看容器详情:docker insecpt 180176be1b4c

启动容器:docker run -itd 180176be1b4c

6.3.DockerFile构建镜像

dockerfile

#注释:这个脚本是干啥的,this is dockerfile
FROM centos:7  #从哪来的,基于centos:7这个镜像
MAINTAINER lixiang #作者
RUN echo "正在构建镜像!!!"
WORKDIR /root/lixiang #指定工作目录,如无则自动给出创建
COPY 123.txt /root/lixiang  #赋值123.txt到/root/lixiang,注意一定要用相对路径,123.txt要和dockerfile载一个目录下
RUN yum -y install net-tools

构件镜像:docker bulid -t mycentos:v2 .

6.4.Docker镜像分层结构剖析

dockerfile执行过程


fc24b2c71503418ea2c90c157a4781e9.jpg

839f1d4f63204244bd2323e2dfc1c195.jpg


总结:

共享资源

对容器的任何改动都不会影响镜像层

容器层可读可写,镜像层只读

6.5.Dockerfile基础命令

FROM

基于那个镜像构建

MAINTAINER

标明作者

COPY

复制宿主机文件到镜像中(只能用相对路径,绝对路径会报错)

ADD

复制宿主机文件到镜像中(加入文件是.tar.gz,他会帮解压到指定目录)

WORKDIR

指定工作目录,假如路径不存在会创建目录

ENV

指定环境变量

EXPOSE

暴漏容器端口

RUN

执行动作,用于构建镜像层,作用于镜像层面

ENTRYPOINT

容器启动的时候执行,作用于容器层,dockerfile里面有多条时只执行最后一条

CMD

在容器启动的时候执行,作用于容器层,dockerfile里面有多条时只执行最后一条

容器启动后执行默认的命令或参数,允许被修改

命令格式

shell命令格式:RUN yum -y install net-tools

exec命令格式:RUN [ “yum”,“-y”,“install”,“net-tools” ]

测试

第一个dockerfile

#第一个
FROM centos:7
RUN echo "images building!"
CMD ["echo","container","starting..."]
ENTRYPOINT ["echo","container","starting !!!"]

d6812f76d5564a34923f21ea3250bd61.jpg


第二个dockerfile

#第二个
FROM centos:7
RUN echo "images building!"
CMD ["echo","containe1r","starting..."]
CMD ["echo","container2","starting..."]
ENTRYPOINT ["echo","container2","starting !!!"]
ENTRYPOINT ["echo","container2","starting !!!"]

450fdb5d87ae497eb083f7d179235c6d.jpg


第三个dockerfile

#第三个
FROM centos:7
CMD ["-ef"]
ENTRYPOINT ["ps"]

a4ea9f4e75bf4609b0e17f467b376ecc.jpg


6.6.Dockerfile构建Tomcat镜像

本机构建环境


解压 jdk :tar -xvf jdk-8u211-linux-x64.tar.gz;mv jdk1.8.0_211 /usr/local/jdk8

解压tomcat : tar -xvf apache-tomcat-8.5.35.tar.gz;mv apache-tomcat-8.5.35 /usr/local/tomcat

配置java的环境变量


vi /etc/profile

export JAVA_HOME=/usr/local/jdk1.8

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

source /etc/profile

本机测试启动tomcat(本机测试注意关闭防火墙)/usr/local/tomcat/bin/startup.sh


本机测试通过开启防火墙:systemctl start firewalld


编写dockerfile文件


#dockerfile构建tomcat,安装jdk

FROM centos:7

MAINTAINER lixiang


ADD jdk-8u211-linux-x64.tar.gz /usr/local/

RUN mv jdk1.8.0_211 jdk1.8

ENV JAVA_HOME=/usr/local/jdk1.8

ENV JRE_HOME=$JAVA_HOME/jre

ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH


ADD apache-tomcat-8.5.35.tar.gz /usr/local/

RUN mv apache-tomcat-8.5.35 tomcat

EXPOST 8080

ENTRYPOINT [“/usr/local/tomcat/bin/catalina.sh”,“run”]


执行dockerfile文件


docker build -t centos:tomcat .

启动docker镜像


docker run -itd -p 80:8080 -v /root/tomcat/ROOT:/usr/local/tomcat/webapps/ROOT centos:tomcat /bin/bash

6.7.Dockerfile构建Nginx镜像

nginx_install.sh脚本编写

touch nginx_install.sh ; chmod u+x nginx_install.sh ; vi nginx_install.sh

#!/bin/bash

yum -y install gcc gcc-c++ make pcre pcre-devel zlib zlib-devel

cd /usr/lcoal/nginx

./configure --prefix=/user/local/nginx && make && make install

dockerfile文件编写

vi dockerfile

#dockerfile安装nginx镜像

FROM centos:7

ADD nginx-1.16.0.tar.gz /usr/lcoal

COPY nginx_install.sh /usr/local

RUN /usr/local/nginx_install.sh

EXPOSE 80

启动容器

docker run -itd 80:80 centos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;”

6.8.Dockerfile构建Redis镜像

编写redis编译安装shell脚本 redis_install.sh

#!/bin/bash

yum install -y gcc gcc-c++ make openssl openssl-devel

cd /usr/local/redis-4.0.9

make && make PREFIX=/usr/local/redis install

mkdir /usr/local/redis/conf

cp /usr/local/redis-4.0.9/redis.conf /usr/local/redis/conf/

sed -i ‘69s/127.0.0.1/0.0.0.0/’ /usr/local/redis/conf/redis.conf

sed -i ‘88s/protected-mode yes/protected-mode no/’ /usr/local/redis/conf/redis.conf

编写dockerfile

#dockerfile部署redis镜像

FROM centos:7

ADD redis-4.0.9.tar.gz /usr/local/

COPY redis_install.sh /usr/local/

RUN sh /usr/local/redis_install.sh

ENTRYPOINT [“/usr/local/redis/bin/redis-server”,“/usr/local/redis/conf/redis.conf”]

执行dockerfile :docker build -t centos:redis .

启动容器:docker run -itd -p 6379:6379 centos:redis /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

进入容器:docker exec -it 9b402baeaba7 /bin/bash

6.9.Dockerfile构建Mysql镜像

拉取mysql:5.7镜像

docker pull mysql:5.7

编写dockerfile文件基于5.7mysql再创镜像

FROM mysql:5.7

WORKDIR /docker-entrypoint-initdb.d

ENV LANG=C.UTF-8

ADD init.sql

构建镜像:docker build -t mysql_new:5.7 .

启动镜像:docker run -itd --name=mysql_5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql_new:5.7


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
运维 虚拟化 开发者
Docker-全面详解(学习总结---从入门到深化)
Docker-全面详解(学习总结---从入门到深化)
76 1
|
2月前
|
NoSQL Redis Docker
Docker再学习 - 实战
Docker再学习 - 实战
25 1
|
2月前
|
Java C++ Docker
Docker再学习 - 阿里加速配置篇
Docker再学习 - 阿里加速配置篇
155 0
|
3月前
|
关系型数据库 MySQL Go
Docker从入门到精通:Docker镜像相关命令学习
本文介绍了Docker中管理镜像的基本命令:`docker images`用于查看镜像列表,`docker search`从Docker Hub搜索镜像,`docker rmi`删除镜像,`docker tag`则用于标记和重命名镜像。通过这些命令,用户能有效管理自己的Docker镜像资源。
56 1
|
3月前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
125 0
|
3月前
|
存储 Ubuntu Docker
Docker从入门到精通:Docker pull命令学习
了解Docker镜像下载方法!使用`docker pull`命令从[Docker Hub](https://hub.docker.com/)获取镜像。基本语法是`docker pull NAME[:TAG]`。例如,拉取Python最新镜像的命令是`docker pull python`或`docker pull python:latest`。可选参数包括`-a`(拉取所有标签)和`--quiet`(只显示进度条)。拉取后,用`docker images`检查镜像是否成功存储。开始你的容器化之旅吧!
144 0
|
3月前
|
Cloud Native Shell Linux
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
66 0
|
3月前
|
Cloud Native Linux 虚拟化
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
161 0
|
3月前
|
Ubuntu 应用服务中间件 Docker
docker-学习
docker-学习
47 0
|
3月前
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
79 0