docker笔记

docker学习笔记

为什么使用容器?

1.上线流程繁琐
  开发->测试->申请资源->审批->部署->测试等环节

2.资源利用率低
  普遍服务器利用率低,造成过多浪费
	
3.扩容/缩容不及时
  业务高峰期扩容流程繁琐,上线不及时
	
4.服务器环境臃肿
  服务器越来越臃肿,对维护、迁移带来困难

5环境不一致

docker是什么?


1.使用组广泛的开源容器引擎

2.一种操作系统级的虚拟化技术

3.依赖于linux内核特性Namespace(资源隔离)和Cgroups(资源限制)

4.一个简单的应用打包工具

docker设计目标

1.提供简单的应用程序打包工具

2.开发人员和运维人员职责逻辑分离

3.多环境保持一致性

Docke应用场景

1.应用程序打包
2.应用程序隔离
3.持续集成
3.部署微服务
4.快速搭建测试环境
5.提供PaaS产品(平台即服务)

Docker版本:

1.社区版(Community Edition,CE)
2.企业版(Enterprise Edition,EE)

支持平台:

Linux(CentOS,Debian,Fedora,Oracle,Linux,RHEL,SUSE和Ubuntu)
Mac
Windows

docker官方网站:

docs.docker.com

Docker安装

安装前建议关闭selinx和firewalld

systemctl stop firewalld #关闭防火墙
setenforce 0             #临时关闭Selinux

#永久关闭selinux

vim /etc/selinux/config
#将SELINUX=enable 改成 SELINUX=disabled

安装依赖包

yum install -y yum-utils 

添加docker软件包源

#官方的:
yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo

#建议使用阿里的:
cd /etc/yum.repos.d
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker CE
想要一键安装并配置镜像加速点这:
docker安装脚本

yum install -y docker-ce

启动docker服务并设置开机启动

systemctl start docker
systemctl enable docker

docker官方安装使用方法:

https://docs.docker.com/engine/install/centos/

官方文档:

https://docs.docker.com

阿里的软件源:

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

查看docker版本及配置信息

docker info

镜像是什么?

1. 一个分层存储的文件,不是一个单一的文件
2. 一个软件的环境
3. 一个镜像可以创建N个容器
4. 一种标准化交付
5. 一个不包含Linux内核又精简的Linux操作系统

配置docker镜像加速

vi /etc/docker/daemon.json

{
 "registry-mirrors":[
  "https://registry.docker-cn.com",
  "https://hub-mirror.c.163.c0m",
  "https://docker.mirrors.ustc.edu.cn"
  ]
}

然后重启docker服务

Systemctl restart docker

使用docker info查看就没有配置成功

 Registry Mirrors:
  https://registry.docker-cn.com/
  https://hub-mirror.c.163.c0m/
  https://docker.mirrors.ustc.edu.cn/
 Live Restore Enabled: false

拉取centos:7的镜像

docker pull centos:7
#执行效果:
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7
docker.io/library/centos:7

使用docker images查看镜像

docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       7         eeb6ee3f44bd   8 months ago   204MB

docker常用命令

docker  version #查看docker版本

docker info  #查看docker的信息

docker ps #查看运行的容器,-a查看所有容器

docker inspect 容器ID  #查看容器的详细信息

docker  search centos#搜索可用docker镜像

docker  images #查看当前docker所有镜像

docker  pull  centos #下载镜像

cat   centos.tar | docker import  -  centos6_newname  

#Docker导入镜像

docker  export  容器_id  > cenos6.tar  
#Docker导出镜像

docker  run  centos  echo "hello word"
#在docker容器中运行hello world!

docker  run  centos  yum install ntpdate
#在容器中安装ntpdate的程序

docker  ps -l 
#命令获得最后一个容器的id,

docker   ps  -a
#查看所有的容器。

运行docker commit 提交刚修改的容器,例如:

docker  commit  2313132  centos:v1

docker run -i -t -d centos /bin/bash 
#在容器里启动一个/bin/bash shell环境,可以登录进入操作,其中-t tty,表示打开一个终端的意思,-i interactive,表示可以交互输入,-d表示在后台启动,以daemon方式启动。  


docker  run  -d  centos:v1  /bin/bash 

Docker  stop  id #关闭容器

Docker  start  id #启动某个容器

docker  rm  id #删除容器,
docker  rmi  images #删除镜像

docker  run  -d  -p  80:80  -p 8022:22   centos:v2,

#解析:-p指定容器启动后docker上运行的端口映射及容器里
#运行的端口,80:80,第一个80表示docker系统上的80,第
#二个80表示docker虚拟机里面的端口。用户默认访问本机80端口,自动映射到容器里面的80端口。

docker  exec   -it  id  /bin/bash #进入容器终端

docker  exec  id ifconfig
#查看容器的IP地址;

Docker  inspect id |grep -i ipaddr
#查看容器IP地址;

Docker  exec  df -h
#查看容器的磁盘分区信息;

使用docker安装nginx

#拉取nginx镜像
docker pull nginx

#查看镜像有没有拉取成功
docker images
#执行结果
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    605c77e624dd   4 months ago   141MB
redis        latest    7614ae9453d1   5 months ago   113MB
centos       7         eeb6ee3f44bd   8 months ago   204MB

#启动docker容器
docker run -itd --name nginx_web -p 8080:80 nginx

#查看容器状态
docker ps
#执行结果
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
d0f0d8d16ebb   nginx     "/docker-entrypoint.…"   8 minutes ago   Up 8 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx_1

#docker_nginx里的发布目录
/etc/share/nginx/html/index.html
#然后使用主机IP加上端口号进行访问

docker top

docker top 容器id
#查看容器进程
[root@master ~] docker top d0f
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3868                3849                0                   02:51               pts/0               00:00:00            nginx: master process nginx -g daemon off;
101                 3926                3868                0                   02:51               pts/0               00:00:00            nginx: worker process

docker run 的各种参数详细信息

请添加图片描述
请添加图片描述

docker常用管理命令

请添加图片描述
docker ps常用参数

-a 查看所有容器,包含退出
-q 列出所有的容器id

清理所有容器

docker rm -f $(docker ps -qa)

Docker 容器数据持久化

Docker 提供两种方式将数据重宿主机挂载到容器中:

1.volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes).
2.bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。

volumes示例

1、创建数据卷

1.docker volume create nginx-vol
2.docker volume ls
3.docker volume inspect nginx-vol

2.使用数据卷

1.docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx

2.docker run -d --name=nginx-test1 -v nginx-vol:/usr/share/nginx/html nginx   

bind mounts演示

mkdir /opt/wwwroot
docker run -d --name web -p 88:80 -v /opt/wwwroot:/usr/share/nginx/html nginx
#编辑网页
cd /opt/wwwroot
echo "<h1>hello word</h1>"

docker容器网络

1.veth pair:成对出现的一种虚拟网络设备,数据从一端进,从另一端出。用于解决网络命名空间之间隔离。
2.docker0:网桥是一个二层网络设备,通过网桥可以将Linux支持的不同端口连接起来,并实现类似交换机那样的多对多的通信。

docker网络模型:
请添加图片描述

Docker使用iptables实现网络通信

外部访问容器:

bles -t nat -vnL DOCKER

请添加图片描述
容器访问外部:

iptables -t nat -vnL POSTROUTING

请添加图片描述

docker网络模型:
请添加图片描述
DNAT 目标网络地址转换
SNAT 源地址转换

dockerfiel

dockerfile概述

Docker通过Dockerfile自动构建镜像,
Dockerfile是一个包含用于组建镜像的
文本文件,由一条一条的指令组成

请添加图片描述

Dockerfile常用指令

FROM   		#构建新镜像是基于那个镜像
LABEL       #标签
RUN			#构建镜像时运行的shell命令
COPY		#拷贝文件过目录到镜像中
ADD		    #解压压缩包并拷贝
ENV			#设置环境变量
USER		#为RUN、CMD和ENTRYPOINT执行命令指定运行用户
EXPOSE		#声明容器运行的服务端口
WORKDIR	    #为RUN、CMD、ENTRYPOINT、COPY和ADD设置生成工作目录
CMD			#运行容器是默认执行,如果有多个CMD指令,最后一个生效

构建镜像命令

# docker bulid [OPTIONS] PATH |URL| -{flags}
Options:
-t, --tag list 		#镜像名称
-f, --file string 	#指定Dockerfile文件位置
例如:
# docker build -t shykes/myapp .
# docker bulid -t shykes/myapp -f /path/Dockerfile /path
# docker bulid -t shykes/myapps http://www.example.com/Dockerfile

使用dockerfile 基于centos7构建sshd服务

#Dockerfile 配置
FROM centos:7
MAINTAINER This is centos:ssh

#安装ssh和其他服务软件包
RUN  yum update -y  && yum install -y openssh* net-tools lsof telnet passwd

#修改root用户密码
RUN echo "123456" | passwd --stdin root

#设置不使用ssh服务端的pam模块
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

#创建非对称秘钥
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

#关闭pam.d的ssh会话模块
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^ /#/' /etc/pam.d/sshd

#创建ssh工作目录并设置权限
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh

#暴露端口
EXPOSE 22

#开启sshd服务
CMD ["/usr/sbin/sshd","-D"]

Dockerfile 基于centos7镜像搭建nginx服务

#RUN后面跟运行的命令,添加环境包
FROM centos:7

#用户信息
MAINTAINER THIS IS NGINX IMAGE
#RUN后面跟运行的命令,添加环境包
RUN yum  -y update
RUN yum install -y pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx

#将nginx-1.16.1.tar.gz解压后的内容复制到容器中的/usr/local/src目录
ADD nginx-1.16.1.tar.gz  /usr/local/src

#将nginx-1.16.1.tar.gz复制到容器中的/usr/local/src目录
COPY nginx-1.16.1.tar.gz  /usr/local/src

#切换的指定工作目录(相当于cd)
WORkDIR /usr/local/src/nginx-1.16.1
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH

#指定httpd端口
EXPOSE 80

#设置环境变量
ENV aa lss

#让nginx在后台运行,且不退出容器
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

#设置启动容器的命令
#CMD ["nginx"]
#ENTRYPOINT
CMD ["sleep", "10901"]
#ENTRYPOINT ["sleep"]
#HEALTHCHECK

Harbor镜像仓库搭建与使用

Harbor概述

Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应得企业级扩展,
从而获得了更加广泛的应用,这些新的企业级特征性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等,足以满足基本企业要求。

官方:https://goharbor.io/
Github : https://github.com/goharbor/harbor

请添加图片描述

Harbor部署:

下载docker-compose:
docker-compose-linux-x86_64

下载以后把文件上传的linux

#然后执行
#  mv docker-compose-linux-aarch64 /usr/bin/docker-compose

下载harbor2.1.0版本:

harbor2.1.0
请添加图片描述
将软件包导入Linux服务器中
部署Harbor HTTP

#解压软件包
tar -zxvf harbor-offline-installer-v2.1.0.tgz
#进入解压后的目录
cd harbor
#复制文件并重命名
cp harbor.yml.tmpl harbor.yml

#修改配置文件
vi harbor.yml
# Configuration file of Harbor

# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
#hostname: reg.mydomain.com  --> 主机IP  192.168.124.128
hostname: 1922.168.124.128
# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https related config
https:
  # https port for harbor, default is 443
  #port: 443       #注释掉
  # The path of cert and key files for nginx
  #certificate: /your/certificate/path     #注释掉
  #private_key: /your/private/key/path     #注释掉
 

#测试
./prepare
#安装
./install.sh

#使用IP进行访问(注:80端口不要被占用)
账号为:admin
密码为:harbor12345

配置http镜像仓库信任

vi /etc/docker/daemon.json

{
  "registry-mirrors": ["https://2fzifa2u.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.124.128"]
}

重启docker

systemctl restart docker
#这时候harbor会连接不上,在harbor目录下执行
docker-compose up -d
docker-compose ps #查看服务有没有正常运行 

打标签

docker tag centos_7:v1 192.168.124.128:/library/centos_7:v1

登录

docker login 192.168.124.128
账号:admin
密码:harbor12345

上传

docker push 192.168.124.128/library/centos_7:v1

下载

docker pull 192.168.124.128/library/centos_7:v1

docker-compose

是什么

Docker-compose是docker官方的开源项目,
负责实现对docker容器集群的快速编排。
Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成一个引用。
你需要定义一个YAML格式的配置文件docker-compose.yaml,写好多个容器之间的调用关系。
然后,只要一个命令,就能同时启动/关闭这些容器

能干嘛

1.docker建议我们每一个容器中只运行一个服务,因为docker容器本身占用资源极少,所以最好是将
每个服务单独分割出来但是这样我们又面临了一个问题?

2.如果我们需要同时部署好多个服务,难道要每个服务单独写dockerfile然后在构建镜像,构建容器
,所以docker官方提供了docker-compose多服务部署工具

3.例如要实现一个Web微服务醒目,除了Web服务容器本身,往往还需要再加上后端的数据库mysql服
务容器,redis服务器,注册中心eureka,甚至还包括负载均衡容器等。。

4.Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的
应用容器为一个项目(project)

5.可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,
完成构建。Docker-Compose解决了容器与容器之间如何管理编排的问题
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值