docker基础运用及镜像制作

docker安装机基础命令介绍

官方网址:https://www.docker.com/
系统版本选择: docker目前支持 多种操作系统的安装运行,如:Ubuntu centos,redhat,Debian,甚至还支持mac和windows,在Linux上,需要内核版本在3.10以上。docker以前的版本号都是以x.1, x.2 结尾,从2017年开始改为每个季度发布一次稳定版,其版本号也改成了YY.MM。

docker 安装

官方rpm包下载地址
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
二进制下载地址
https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/

docker-compose安装

项目仓库地址
https://github.com/docker/compose/tags

yum 安装docker

rm -rf /etc/yum.repos.d/*
 wget -O /etc/yum.repos.d/CenOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 yum -y install docker-ce

docker 基础命令

docker daemon -help 查看docker帮助文档
ocker info   查看docker 信息
docker search centos 搜索镜像
docker pull xxxx     拉取镜像
docker images   查看当前机器所有镜像
docker save centos > /usr/centos.tar.gz  镜像导出
docker commit -m "镜像描述" 容器ID tag #tag为容器标签 如 nginx:v1
docker cp /路径/文件名 容器ID:/上传路径  #从本地上传文件到容器
docker rmi centos 删除镜像
docker run -it centos:latest  从镜像启动一个容器,并进入容器(ctrl+p+q)退出容器,不注销
docker run -P 镜像ID   #前台启动一个容器。并随机映射一个端口到容器内部
docker run -p 80:80 镜像ID # 前台启动一个容器,并将本机80端口映射到容器80端口
docker run -p 192.168.144.9:80:80 --name ninx 镜像ID  # 前台启动一个容器,并将本地ip:端口映射到容器ID,自定义容器名称为nginx
docker run -p 192.168.144.9::80 --name ninx 镜像ID  # 前台启动一个容器,并将本地ip:随机端口映射到容器ID
docker run -p 192.168.144.9:80:80/udp --name ninx 镜像ID  # 前台启动一个容器,并将本地ip:udp端口映射到容器ID
docker run -p 80:80 -p 81:81 -p 82:82 --name ninx 镜像ID  # 前台启动一个容器,映射多个端口到容器
docker run -d -p 80:80 --name ninx2 镜像ID # 后台启动一个容器
docker ps  查看正在运行的容器
docker ps -a 查看所有容器
docker rf -f  ID 删除容器
docker logs -f #容器ID 查看容器实时日志
docker port 容器ID # 查看容器已经映射的端口
docker stop 容器ID # 停止容器
dockers start 容器ID # 启动容器
docker stop $(docker ps -a -q)  #批量关闭正在运行的容器
docker kill $(docker ps -a -q) #批量强制关闭所有运行中的容器
docker rm -f `docker ps -aq -f status=exited` # 批量关闭所有已关闭的容器

docker 镜像制作

手动制作yum版nginx镜像

下载基础镜像并初始化系统

[root@localhost ~]# docker pull centos
启动并进入容器
[root@localhost ~]# docker run -it centos bash
配置容器环境
[root@d71fc0234652 /]# yum install wget -y
[root@d71fc0234652 /]# cd etc/yum.repos.d/
[root@d71fc0234652 yum.repos.d]# rm -rf ./*
[root@d71fc0234652 yum.repos.d]#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@d71fc0234652 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@d71fc0234652 yum.repos.d]# yum -y install pcre pere-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
安装nginx
[root@d71fc0234652 yum.repos.d]# yum -y install nginx
修改配置文件,使nginx前台启动
[root@d71fc0234652 yum.repos.d]# vim /etc/nginx/nginx.conf
		daemon off;
在宿主机将容器提交为镜像
[root@localhost ~]# docker commit -m "nginx image" d71fc0234652 nginx:v1
从自己打的镜像启动容器
[root@localhost ~]# docker run -d -p 80:80 --name nginx nginx:v1 /usr/sbin/nginx

在这里插入图片描述
测试:我这里没有配置web页面,所以访问报错 可以看到已经访问到nginx了
在这里插入图片描述

DockerFile制作编译版NGINX

DockerFile 可以说是一种可以被docker程序解析的脚本,DockerFile是由一条条约定的命令组成的,每条命令对用linux下的一条命令,Docker 程序将这些DockerFile指令在翻译成正真的linux命令,其有自己的书写方式和支持的命令,Docker程序读取DockerFile并根据指定生成Docker镜像,相比手动制作镜像的方式,DockerFile可以直观的展示镜像是怎么产生的。

 ADD
COPY
ENV
EXPOSE
FROM
LABEL
STOPSIGNAL
USER
VOLUME
WORKDIR
RUN

下载初始化镜像

[root@localhost ~]# docker pull centos
创建DockerFile存放目录并进入此目录
[root@localhost ~]# mkdir -p /opt/dockerfile/nginx && cd /opt/dockerfile/nginx
编写DockerFile 生成镜像的时候会在执行命令的当前目录查早Dockerile文件,所以名称不能写错,D必须是大写
[root@localhost nginx]# vim Dockerfile

  	FROM bluedata/centos7:latest

MAINTAINER yaoxinyuan

RUN yum install -y  gcc gcc-c++  pcre pcre-devel zlib zlib-devel openssl openssl-devel \
    && useradd -r -s /sbin/nologin nginx \
    && yum clean all

ADD nginx-1.20.2.tar.gz /usr/local/src/

RUN cd /usr/local/src/nginx-1.20.2 \
    && ./configure --prefix=/apps/nginx \
    && make \
    && make install \
    && rm -rf /usr/local/src/nginx*

#ADD nginx.conf /apps/nginx/conf/nginx.conf

#COPY index.html /apps/nginx/html/

RUN ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx

EXPOSE 80 443

CMD ["nginx","-g","daemon off;"]

执行镜像构建

	[root@localhost nginx]# docker build -t nginx:v1 .	 

在这里插入图片描述
从镜像启动一个容器

[root@localhost nginx]# docker run -d -p 80:80  nginx:v7
查看启动的容器
[root@localhost nginx]# docker ps

在这里插入图片描述

构建jdk镜像

#
FROM bluedata/centos7:latest
ADD  jdk-8u151-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_151 /usr/local/jdk
ADD profile /etc/profile
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai/ /etc/localtime

执行构建

[root@localhost java]# docker build -t java:v3 .
查看构建的镜像

在这里插入图片描述
验证jdk镜像

[root@localhost java]# docker run -it java:v3 bash
[root@400254d0263c /]# java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

在这里插入图片描述

从jdk镜像构建tomcat镜像

FROM java:v3
ADD apache-tomcat-9.0.56.tar.gz /usr/local/
RUN mv /usr/local/apache-tomcat-9.0.56 /usr/local/tomcat

构建镜像

查看构建的镜像
[root@localhost tomcat]# docker images

在这里插入图片描述

从tomcat 构建业务镜像

创建一个目录

[root@localhost app]# mkdir app1
[root@localhost app]# pwd
/opt/Dockerfile/app

准备Dockerfile

FROM tomcat:v2
ADD app1/index.html /usr/local/tomcat/webapps/app/
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]

准备项目文件
在这里插入图片描述

构建镜像

[root@localhost app]# docker build -t app:v2 .
从镜像启动容器
[root@localhost app]# docker run -it -d -p 8083:8080 app:v2	  

在这里插入图片描述

swarm

1.初始化:

root@k8s-master1:~# docker swarm init --advertise-addr 192.168.144.3 #初始化manager

root@k8s-master1:~# docker swarm join-token  worker #获取token

root@k8s-master1:~# docker node ls #列出swarm集群的节点

2.添加节点

root@k8s-master2:~# docker swarm join --token SWMTKN-1-5vmi21qrc9thymrs9lxsoaebt4j5o01ma8bhfbhasrxwkzo8ch-6zfq0l4mqjzbzt8m0vfm1zjur 172.31.7.101:2377
root@k8s-master3:~# docker swarm join --token SWMTKN-1-5vmi21qrc9thymrs9lxsoaebt4j5o01ma8bhfbhasrxwkzo8ch-6zfq0l4mqjzbzt8m0vfm1zjur 172.31.7.101:2377

3.添加label

root@k8s-master1:~# docker node update   --label-add name=k8s-master1 主机名
k8s-master1.magedu.local.priview
root@k8s-master1:~# docker node update   --label-add name=k8s-master2 主机名
k8s-master2.magedu.local.priview
root@k8s-master1:~# docker node update   --label-add name=k8s-master3 主机名
k8s-master3.magedu.local.priview

4.将其他节点提升为manager角色以实现高可用:

root@k8s-master1:~# docker node promote   k8s-master2.magedu.local.priview 
Node k8s-master2.magedu.local.priview promoted to a manager in the swarm.
root@k8s-master1:~# docker node promote   k8s-master3.magedu.local.priview 
Node k8s-master3.magedu.local.priview promoted to a manager in the swarm.
root@k8s-master1:~# 
root@k8s-master1:~# docker node ls
ID                            HOSTNAME                           STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
nikz1m7wn4go2k5fkr86lhole *   k8s-master1.magedu.local.priview   Ready               Active              Leader              19.03.14
xnloavs2yruuhpx060tmlf6w1     k8s-master2.magedu.local.priview   Ready               Active              Reachable           19.03.14
e0t0mbjagphaqe87okvj11lyd     k8s-master3.magedu.local.priview   Ready               Active              Reachable           19.03.14

5.查看node信息:

root@k8s-master1:~# docker node inspect k8s-master2.local.priview

6.创建网络:

root@k8s-master1:~# docker network  --help
root@k8s-master1:~# docker network  create -d overlay  --subnet=10.220.0.0/21 --gateway=10.220.0.1   --attachable  yao-net
    tzm6el34dt3k1juwoti618u9x
root@k8s-master1:~# docker network  inspect yao-net #验证网络信息

7.创建容器测试

root@k8s-master1:/opt/docker-compose-test# docker service create --replicas 3 -p 8888:80 --network yao-net  --name nginx nginx:latest
    vw6fqt3jwtkazv5n8p76ivz9b
    overall progress: 2 out of 2 tasks 
    1/2: running   [==================================================>] 
    2/2: running   [==================================================>] 
    verify: Service converged 

root@k8s-master1:/opt/docker-compose-test# docker service  ls #验证service
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    vw6fqt3jwtka        nginx               replicated          2/2                 nginx:1.18-alpine   *:8888->80/tcp

root@k8s-master2:~# ss -tnl #验证端口监听,每个服务器都会监听service端口8888
    State                Recv-Q                Send-Q                                Local Address:Port                                 Peer Address:Port                
    LISTEN               0                     128                                   127.0.0.53%lo:53                                        0.0.0.0:*                   
    LISTEN               0                     128                                         0.0.0.0:22                                        0.0.0.0:*                   
    LISTEN               0                     128                                       127.0.0.1:6010                                      0.0.0.0:*                   
    LISTEN               0                     128                                               *:2377                                            *:*                   
    LISTEN               0                     128                                               *:7946                                            *:*                   
    LISTEN               0                     128                                            [::]:22                                           [::]:*                   
    LISTEN               0                     128                                               *:8888                                            *:*                   
    LISTEN               0                     128                                           [::1]:6010                                         [::]:* 

8.访问测试:

root@k8s-master2:~# curl  http://172.31.7.102:8888
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;

9.验证service

root@k8s-master3:~# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
vw6fqt3jwtka        nginx               replicated          2/2                 nginx:1.18-alpine   *:8888->80/tcp

root@k8s-master3:~# docker service ps vw6fqt3jwtka
ID                  NAME                IMAGE               NODE                               DESIRED STATE       CURRENT STATE           ERROR               PORTS
bppmk2mak974        nginx.1             nginx:1.18-alpine   k8s-master1.magedu.local.priview   Running             Running 5 minutes ago                       
9qbddx756jzc        nginx.2             nginx:1.18-alpine   k8s-master3.magedu.local.priview   Running             Running 5 minutes ago

10.验证高可用:

将容器所在的服务器或docker关闭,验证pod副本高可用

通过容器名称互联

启动第一个容器

[root@localhost java]# docker run -it -d  --name java1 java:v1

进入第一个容器 查看hosts文件

docker exec -it aa8a9274e563 bash

在这里插入图片描述

启动第二个容器

使用--link 指令将第一个容器的hosts信息添加到第二个容器的hosts
docker run -it -d --name java3 --link java1:www.yaoxinyuan.com java:v1

进入容器测试

docker exec -it b232c20b8151cb22523fe6686872f848543ed0bd585a6df5d978581353ecf270 bash

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雨煮夕阳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值