Docker从入门到精通

简介:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

  1. dockerClient客户端

  2. Docker Daemon守护进程

  3. Docker Image镜像

  4. DockerContainer容器

起源:

Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。

Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。

一款开源软件能否在商业上成功,很大程度上依赖三件事 - 成功的 user case(用例), 活跃的社区和一个好故事。 dotCloud 自家的 PaaS 产品建立在docker之上,长期维护且有大量的用户,社区也十分活跃,接下来我们看看docker的故事。

  • 环境管理复杂 - 从各种OS到各种中间件到各种app, 一款产品能够成功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。

  • 云计算时代的到来 - AWS的成功, 引导开发者将应用转移到 cloud 上, 解决了硬件管理的问题,然而中间件相关的问题依然存在 (所以openstack HEAT和 AWS cloudformation 都着力解决这个问题)。开发者思路变化提供了可能性。

  • 虚拟化手段的变化 - cloud 时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需使用的需求以及保证可用性和隔离性。然而无论是KVM还是Xen在 docker 看来,都在浪费资源,因为用户需要的是高效运行环境而非OS, GuestOS既浪费资源又难于管理, 更加轻量级的LXC更加灵活和快速

  • LXC的移动性 - LXC在 linux 2.6 的 kernel 里就已经存在了,但是其设计之初并非为云计算考虑的,缺少标准化的描述手段和容器的可迁移性,决定其构建出的环境难于迁移和标准化管理(相对于KVM之类image和snapshot的概念)。docker 就在这个问题上做出实质性的革新。这是docker最独特的地方。


安装: 以docker-ce版本为例

官方文档

https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1

按照文档步骤:

1、卸载旧版本

老版本的Docker被称为dockerdocker-engine。如果安装了它们,请卸载它们以及相关的依赖项。

sudo yum remove docker

 

2、新增一个yum

使用以下命令设置稳定的存储库。即使您想从边缘测试存储库安装构建,也总是需要稳定的存储 库。

sudo yum-config-manager  --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum-config-manage命令找不到  安装yum-utils

yum -y install yum-utils

 

默认的yum仓库 没有docker的最新版

 

3、安装最新版本的Docker CE,或者转到下一步安装特定版本:

 sudo yum install docker-ce

 

4、启动Docker

sudo systemctl start docker

 

5、docker通过运行hello-world 映像验证安装是否正确。

sudo docker run hello-world

 

6开机自启docker

 

systemctl enable docker

安装完成


Docker_常用命令

 

Docker -v

查看版本

Search  xxxx

从hub搜索img

Pull xxx:tag

从hub检出img   tag可以到docker官网查看  一般是版本  不带tag默认是最新版

imgaes

当前已有docker镜像

Rmi

删除镜像

 

PS:

Docker中国  pull速度更快

docker pull registry.docker-cn.com/library/iamges:tag

例如:

docker pull registry.docker-cn.com/library/rabbitmq:3.7-management

 

 

容器操作

 docker run --name mytomcat -d tomcat:latest

根据镜像启动容器 --name 自定义名称 -d后台运行 容器名称:tag。此操作相当于启动了一个容器,可以启动多个

 docker ps

查看当前已经运行的容器

docker stop xxx

停止容器 xxx可以是容器id或名称

Docker ps -a

查看所有容器状态

docker start xxx

启动容器

Docker rm xxx

删除容器

docker run -d -p 8080:8080 tomcat

端口映射 :-p 外部端口:docker端口

Docker exec -it xxxxID /bin/bash

进入容器目录

docker run --name tomcat -p 8080:8080 -v /zm:/usr/local/tomcat/webapps/ROOT -d 容器id

将容器中的/usr/local/tomcat/webapps/ROOT目录挂载到容器外部的 zm目录

 docker inspect xxxx

查看容器各参数情况

镜像默认存放docker内部目录

/var/lib/docker/overlay2/

 


示例 安装Mysql:

1、docker search mysql

2、docker pull mysql

3、docker run --name mysql -d mysql

 

异常  第一次未启动成功

[root@MiWiFi-R3G-srv ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@MiWiFi-R3G-srv ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES

fcc96724d772        mysql               "docker-entrypoint.s…"   13 seconds ago      Exited (1) 12 seconds ago                       mysql

[root@MiWiFi-R3G-srv ~]# docker logs mysql

error: database is uninitialized and password option is not specified You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

正确启动:

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

 

 

 

指定ROOT密码

 

高级用法

docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:tag

把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面

改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql);

指定mysql的一些配置参数:

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

 


Docker打包镜像:

1、创建Dockerfile文件

内容:

FROM java:8

MAINTAINER zm

add spring-boot-crud-0.0.1-SNAPSHOT.jar app.jar

EXPOSE 8082

ENTRYPOINT ["java","-jar","app.jar"]

 

镜像为java 标签版本为8

作者为zm

将spring-boot-crud-0.0.1-SNAPSHOT.jar添加到镜像中并重命名为app.jar

运行镜像 监听8082端口

启动是运行java -jar

 

2、编译镜像

docker build -t boot/dockerimg ./

boot是前缀  dockerimg 含有dockerfile和项目的目录

./ 表示dockerfile的文件目录

3、打包镜像到tar

docker save 实例ID -o >./myapp.tar

 docker save myapp:latest > ./myapp.tar

 

4、加载镜像

Docker load < ./myapp.tar

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值