柚子快报邀请码778899分享:容器 Docker学习

http://yzkb.51969.com/

1.概念

1.Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

        1.Docker允许开发中将应用,依赖,函数库,配置一起打包,形成可移植镜像

        2.Docker应用运行在容器中,使用沙箱机制,相互隔离

2.Docker如何解决开发,测试,生产环境有差异的问题

        1.Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行。系统函数库可以绕过应用系统,直接操作Linux内核,所以不受操作系统的限制。

3.Docker与虚拟机

虚拟机:虚拟机是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在windows系统中运行Ubuntu系统,这样就可以运行任意的Ubuntu应用了

差别:

        1.docker是一个系统进程,虚拟机是在操作系统中的操作系统

        2.docker体积小,启动速度快,性能好。虚拟机体积大,启动速度慢,性能一般。

4.镜像和容器

镜像(image):Docker将应用程序及其所需的依赖,函数库,环境,配置等文件打包在一起,称为镜像。镜像是只读的,不可改变。一个镜像可以运行多个容器。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

DockerHub:DockerHub是一个Docker镜像的托管平台,这样的平台称为Docker Registry。

Docker架构:Docker是一个CS架构的程序,由两部分组成:

        服务端(server):Docker守护进程,负责处理Docker指令,管理镜像,容器等。

        客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

2.Docker安装

1.卸载docker命令

yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-selinux \

docker-engine-selinux \

docker-engine \

docker-ce

2.安装yum工具

yum install -y yum-utils \

device-mapper-persistent-data \

lvm2 --skip-broken

3.更新本地镜像源

yum-config-manager \

--add-repo \

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

sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

3.安装docker

yum install -y docker-ce

4.启动docker

启动前必须关闭防火墙

# 关闭

systemctl stop firewalld

# 禁止开机启动防火墙

systemctl disable firewalld

systemctl start docker # 启动docker服务

systemctl stop docker # 停止docker服务

systemctl restart docker # 重启docker服务

5.配置镜像加速器

阿里云镜像加速

3.docker基本操作

1.镜像相关命令

        镜像名称一般分为两部分: [repository]:[tag] 如: mysql:5.7  在没有指定tag时,默认是latest,最新版本

docker build: 构建镜像

docker pull: 从远程拉取镜像

docker images: 查看镜像

docker rmi: 删除镜像

docker rmi nginx:latest

docker push: 推送镜像到服务

docker save: 保存镜像为一个压缩包

docker save -o nginx.tar nginx:latest

docker load: 加载压缩包为镜像

docker load -i nginx.tar

2.容器相关命令

docker run:运行容器

docker run --name nginx_hzj -p 80:80 -d nginx

# -d 后台运行

# 左侧端口为宿主机端口,右侧为容器

# 运行成功后返回容器ID

docker pause: 暂停容器运行

docker unpause: 暂停恢复运行

docker stop: 停止容器

docker stop nginx_hzj

docker start: 停止恢复运行

docker start nginx_hzj

docker exec: 进入容器执行命令

docker exec -it nginx_hzj bash

docker logs:查看容器运行日志  添加-f 可以持续查看日志

docker ps: 查看所有运行的容器及状态

docker ps -a

docker rm: 删除指定容器

docker rm -f nginx_hzj

# -f 强制删除运行中的容器

3.数据卷(volume)

        数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录。把宿主机上真是存在的文件映射到容器中,实现数据解耦。就像快捷方式一样。

docker volume create: 创建一个volume

docker volume create html

docker volume inspect: 显示一个或多个volume的信息

docker volume inspect html

docker volume ls: 列出所有的volume

docker volume pruse: 删除未使用的volume

docker volume rm:删除一个或多个指定的volume

4.挂载数据卷

创建容器时,通过-v参数来挂载一个数据集到某个容器目录,数据集不存在时会自动创建

docker run --name nginx_volume -p 80:80 -v html:/usr/share/nginx/html -d nginx

5.Dockerfile自定义镜像

1.镜像结构

        镜像是将应用程序及其需要的系统函数库,环境,配置依赖打包而成。

基础镜像(BaseImage):应用依赖的系统函数库,环境,配置,文件等。

层(Layer):在BaseImage基础上添加安装包,依赖,配置等,每次操作都形成新的一层。

入口(Entrypoint):镜像运行入口,一般是程序启动的脚本和参数。

2.什么是Dockerfile

        Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每个指令都会形成一层Layer

指令说明示例FROM指定基础镜像FROM centos:6ENV设置环境变量,可在后面指令使用ENV key valueCOPY拷贝本地文件到镜像的指定目录COPY ./mysql-5.7.rpm /tmpRUN执行Linux的shell命令,一般是安装过程的命令RUN yum install gccEXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080ENTRYPOINT镜像中应用的启动命令,容器运行时调用EXTRYPOINT java -jar xx.jar

# 在dockerfile文件的目录下执行命令 . 代表当前目录

docker build -t javaweb:1.0 .

docker run --name web_hzj -p 8090:8090 -d javaweb:1.0

4.DockerCompose

1.什么是DockerCompose

        Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!

        Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

version: "3.2" # 脚本版本号

services:

nacos: # 容器名称,自己起, --name

image: nacos/nacos-server # 镜像

environment: # 环境变量

MODE: standalone

ports:

- "8848:8848"

mysql:

image: mysql:5.7.25

environment:

MYSQL_ROOT_PASSWORD: 123

volumes: # 挂卷

- "$PWD/mysql/data:/var/lib/mysql"

- "$PWD/mysql/conf:/etc/mysql/conf.d/"

userservice: # 临时构建容器

build: ./user-service

orderservice:

build: ./order-service

gateway:

build: ./gateway

ports:

- "10010:10010"

2.Centos7安装DockerCompose

1.下载

curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

2.修改文件权限

chmod +x docker-compose

3.Base自动补全命令

curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

如果报错,执行下方命令

echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts

3.执行DockerCompose文件

compose文件与微服务包上传至服务器

docker-compose up -d

重启指定微服务

docker-compose restart gateway userservice orderservice

5.Docker镜像仓库

1.常见镜像仓库服务

公共仓库:如Docker官方的Docker Hub,国内的网易云,阿里云等

私有仓库:本地搭建

2.私有仓库搭建

1.简化版镜像仓库

        Docker官方的 Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。命令如下:

docker run -d \

--restart=always \

--name registry \

-p 5000:5000 \

-v registry-data:/var/lib/registry \

registry

2.带有图形化界面版本

        该版本为私人提供,非官方,所以使用DockerCompose部署带有图像界面的DockerRegistry,先进行第3步配置信任,命令如下:

version: '3.0'

services:

registry:

image: registry

volumes:

- ./registry-data:/var/lib/registry

ui:

image: joxit/docker-registry-ui:static # 图形化界面

ports:

- 8080:80

environment:

- REGISTRY_TITLE=侯智杰私有仓库

- REGISTRY_URL=http://registry:5000 #仓库地址

depends_on:

- registry

结果如下 

 

3.配置Docker信任地址

        我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置

# 打开要修改的文件

vi /etc/docker/daemon.json

# 添加内容:ip地址填自己的

"insecure-registries":["http://192.168.1.52:8080"]

# 重加载

systemctl daemon-reload

# 重启docker

systemctl restart docker

4.在私有镜像仓库推送或拉取镜像

        推送镜像到私有镜像服务必须先tag

1.重新tag本地镜像,名称前缀为私有仓库的地址: 192.168.1.52:8080/

docker tag nginx:latest 192.168.1.52:8080/nginx:1.0

2.推送镜像

docker push 192.168.1.52:8080/nginx:1.0

 

3.拉取镜像

docker pull 192.168.1.52:8080/nginx:1.0

柚子快报邀请码778899分享:容器 Docker学习

http://yzkb.51969.com/

参考文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。