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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 学习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
相关文章
|
1月前
|
存储 Ubuntu Linux
学习docker
学习docker
33 1
|
1月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
227 3
|
1月前
|
运维 Kubernetes 开发者
Docker Swarm学习
【10月更文挑战第5天】
36 3
|
1月前
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
36 1
|
2月前
|
存储 Ubuntu Docker
Docker学习
Docker学习
59 4
|
1月前
|
Linux 应用服务中间件 Shell
docker学习--docker容器镜像常用命令大全(简)
本文档详细介绍了Docker中的镜像命令与容器管理命令。镜像命令部分涵盖了镜像搜索、下载、上传等操作;容器管理命令则包括了容器的创建、启动、停止、删除及日志查看等功能。通过具体示例,帮助用户更好地理解和使用Docker相关命令。
150 0
|
1月前
|
Shell 应用服务中间件 nginx
docker学习--最详细的docker run 各子命令解释与应用
`docker run` 是 Docker 中用于启动容器的基本命令。常用子命令包括 `-i`(交互模式)、`-t`(分配终端)、`-d`(后台运行)、`-p`(端口映射)、`--name`(指定容器名)。例如,`docker run -it nginx:1.20 /bin/bash` 可以创建并进入交互式容器。使用 `-d` 可在后台运行容器,`-p` 可将容器端口映射到主机端口,`--name` 则用于自定义容器名称以便管理。
162 0
|
3月前
|
网络协议 Shell Docker
docker 学习之路
docker 学习之路
36 1
|
5月前
|
NoSQL Redis Docker
Docker再学习 - 实战
Docker再学习 - 实战
39 1
|
5月前
|
Java C++ Docker
Docker再学习 - 阿里加速配置篇
Docker再学习 - 阿里加速配置篇
327 0