Docker基础

Docker

docker vs VMware

VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用;

Container(Docker容器),在宿主机器、宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装应用。

什么是docker?

docker是一个开源的应用容器引擎,基于go语言开发并遵从Apache2.0协议开源。

docker可以让开发者打包他们的应用到一个可移植的容器中,然后发布到任何linux机器上。

容器之间使用沙箱机制,相互没有任何接口(类iphone的app),并且容器开销极低。

docker优势

1、更快速的交付和部署

2、更高效的虚拟化

3、更轻松的迁移和扩展

4、更简单的管理

docker相关概念

Docker是CS架构,主要有两个概念:

1.Docker daemon: 运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与 Docker daemon交互

2.Docker client: Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker

daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的

Docker daemon

Docker的三个主要概念:

镜像(image)

Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,Tomcat镜像\=\=》Run\=\=》Tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container)

Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。

启动、停止、删除、基本命令!

目前就可以把这个容器理解为就是一个简易的Linux系统

境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。

仓库(repository)

仓库就是存放镜像的地方!

仓库分为共有仓库和私有仓库!

Docker Hub

阿里云都有容器服务器(配置镜像加速)

docker常用命令

帮助命令

docker version # 显示Docker的版本信息`

docker info # 显示Docker的系统信息,包括镜像和容器的数量

docker 命令 --help # 帮助命令,可以查看Docker的所有命令

镜像命令

docker pull 镜像名 #下载镜像

docker push 镜像名 #推送镜像到仓库

docker images #列出镜像

dockers rmi 镜像名/镜像id #删除镜像 -f 强制

dockers rmi -f $(docker images -aq) #一键删除所有镜像

docker search 镜像名 #搜索镜像

docker image inspect 镜像名 #查看镜像分层的方式

容器命令

docker run [可选参数] image # 新建容器并启动

参数说明:

--name="Name" 容器名字,用来区分容器

-d 后台方式运行

-it 使用交互方式运行,进入容器查看内容

-p 指定容器的端口 -p 8080:8080

-p ip:主机端口:容器端口

-p 主机端口:容器端口

-p 容器端口

-P 随机映射端口号

-v #卷挂载

-e # 环境配置

docker ps #列出正在运行的容器 -a 列出所有容器

exit # 直接容器停止并退出

Ctrl + P + Q # 容器不停止退出

docker rm 容器id # 删除指定的容器

docker rm -f $(docker ps -aq) # 删除所有的容器

docker start 容器id # 启动容器 docker restart 容器id # 停止容器 docker stop 容器id # 停止当前正在运行的容器 docker kill 容器id # 强制停止当前容器

docker logs -f -t --tail # 查看容器日志

docker top 容器id #查看容器中的进程信息

docker inspect 容器id #查看容器的元数据

docker cp 容器id:容器内路径 目的的主机路径 # 从容器内拷贝文件到主机上

进入容器命令

docker exec -it 容器id /bin/bash

docker attach 容器id

exec与attach的区别:

docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)

docker attach # 进入容器正在执行的终端,不会启动新的进程!

Docker图形化界面管理工具!

docker run -d -p 8088:9000 \

--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true\

portainer/portainer

Commit镜像

docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG] #把一个容器提交镜像

容器数据卷

容器数据卷的用途

容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地

这就是卷技术,目录的挂载,将容器内的目录,挂载到Linux上面

==容器的持久化和同步操作,容器间可以数据共享==

使用数据卷

通过-v实现数据卷

eg:docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

-v 容器内路径 # 匿名挂载

-v 卷名:容器内路径 # 具名挂载

v /宿主机路径:容器内路径 # 指定路径挂载

通过-v 容器内路径:ro/rw 改变读写权限

ro:readonly 只读

rw:readwrite 可读可写

一旦这个设置了容器权限,容器对我们挂载出来的就有限定了

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

只要看到ro就说明这个路径只能通过宿主机操作,容器内部无法操作

Dockerfile

Dockerfile就是用来构建Docker镜像的构建文件,命令脚本

通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层

docker bulid -f dockerfile1 -t /candy/centos #构建镜像

dockerfile指令

FROM # 基础镜像,一切从这里开始构建 CentOS MAINTAINER # 镜像是谁写的,姓名+邮箱 RUN # 镜像构建的时候需要运行的命令 ADD # 步骤,tomcat镜像,tomcat压缩包,添加内容 WORKDIR # 镜像的工作目录 VOLUME # 挂载的目录 EXPOSE # 保留端口配置 CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 ONBULID # 当构建一个被继承 DockerFile 这个时候就会运行 ONBULID 指令,触发指令 COPY # 类似ADD,将我们文件拷贝到镜像中 ENV # 构建的时候设置环境变量

CMD 和 ENTRYPOINT 区别 :

CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令

发布镜像

docker login -u anygts #登录hub.docker账号

docker tag httpd:latest docker账号名称/httpd:v1 #打标签 ,必须的!

docker push docker账号名称/httpd:v1 #上传

docker logout #登出

docker网络

所有的容器不指定网络的情况下,都是Docker0路由的,Docker会给我们的容器分配一个默认的可用IP

Docker使用的是Linux的桥接,宿主机是一个Docker容器的网桥

—link就是我们在hosts配置中增加了一个172.17.0.3 tomcat02 6846b34d8575的映射,但是现在学习Docker已经不建议使用 —link 了,自定义网络不适用于Docker0!!!

通过 --link 就可以解决网络连通问题

eg: docker run -d -P --name tomcat03 --link tomcat02 tomcat

docker network ls #查看所有的docker网络

网络模式

  • Bridge:桥接模式,Docker上搭桥

  • None:不配置网络

  • Host:和宿主机共享网络

  • Container:容器内网络连通

直接启动的命令 --net bridge,这个就是docker0

[root@localhost ~]# docker run -d -P --name tomcat01 --net bridge tomcat

docker0特点:默认,域名不能访问,--link可以打通连接

自定义一个网络!

--driver bridge

--subnet 192.168.0.0/16 192.168.0.2-->192.168.255.255

--gateway 192.168.0.1

[root@localhost ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郭先生Music

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

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

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

打赏作者

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

抵扣说明:

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

余额充值