Docker是一种新的技术,尽管它的发行日期已是好几年前。概括来说,Docker是一个开源的应用容器引擎,常被用来和虚拟机做对比,它让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。对的,虚拟机也可以实现这种需求,但装系统,装配置环境,占用内存大等缺点让Dockers大放光彩。当然,也有人对这种技术呈批判态度,详见一场令人追悔莫及的豪赌。技术无对错,并且它带来的便捷性已经在很多公司体现,我们还是需要空杯学习一下这种技术。

以下为常见操作实践:

Centos7安装操作:
1 卸载老版本的 docker 及其相关依赖
sudo yum remove docker docker-common container-selinux docker-selinux docker-engine
2 安装 yum-utils
sudo yum install -y yum-utils
3添加阿里云docker的yum源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4更新yum索引
sudo yum makecache fast
5安装 docker-ce
sudo yum install docker-ce
6启动 docker
sudo systemctl start docker
~可以查看所有仓库中所有docker版本,并自己选择版本安装
yum list docker-ce --showduplicates | sort -r
Ubuntu安装操作:
## 1. 查看docker安装情况
sudo apt-cache search all | grep docker
## 2. 卸载docker
sudo apt-get remove docker docker-engine docker-ce docker.io
## 3. 查看信息
sudo docker info
## 4. 查看镜像
sudo docker image ls
Docker镜像源修改:

# vi /etc/docker/daemon.json  ---修改或新增 /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
systemctl restart docker.service
进程启动/停止:
sudo systemctl start docker
sudo systemctl stop docker
拉取镜像:
sudo systemctl pull zookeeper
启动镜像:
sudo docker run --privileged=true -d --name zookeeper --publish 2181:2181  -d zookeeper:latest
查看启动镜像:
sudo docker ps
sudo docker ps -a :查看所有容器,包括停止的
停止镜像:
sudo docker stop 0e2511b527f2
删除镜像:
sudo docker rmi kibana:6.6.1    或者 sudo docker rmi IMAGEID
查看容器日志:
docker logs 3d58e0b1d4b8
进入容器:
sudo docker exec -it elasticsearch:6.6.1 /bin/bash
删除容器:
sudo docker rm [NAME]/[CONTAINER ID]:不能够删除一个正在运行的容器,会报错。需要先停止容器。
构建Registry镜像私服:
构建Registry镜像私服:
构建Harbor镜像私服(大部分企业使用):
1 root安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s `-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
安装命令补全插件
yum install bash-completion
添加到补全命令
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
docker-compose -v2 下载harbor
wget https://github.com/goharbor/harbor/releases/download/v1.9.2/harbor-online-installer-v1.9.2.tgz
3 解压缩并修改配置文件
vim harbor.yml
4 安装
./install.sh
5 登录 默认root/配置的harbor_admin_password6 推镜像到私服docker login 192.168.70.31在项目中标记镜像: docker tag SOURCE_IMAGE[:TAG]  192.168.70.31/library/IMAGE[:TAG]推送镜像到当前项目: docker push 192.168.70.31/library/IMAGE[:TAG]
7 下载镜像docker pull 192.168.70.31/library/hello:latest8 停止harbordocker-compose stop
MySQL镜像:
// -v是数据卷挂载
docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
命令说明:-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。--name : 镜像的名称-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
安装ElasticSearch:
sudo docker pull elasticsearch:6.6.1
sudo docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.6.1
#配置外部文件启动
sudo docker run --rm -it -p 9200:9200 -p 9300:9300 -v "$PWD"/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:6.6.1#进入容器,可修改/config下的elasticsearch.yml配置或者指定外部配置文件
sudo docker exex -it elasticsearch:6.6.1 /bin/bash访问:
curl 127.0.0.1:9200            http://192.168.70.31:9200/
安装ElasticSearch-Head:
sudo docker pull mobz/elasticsearch-head:5
docker run -d --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
访问:
http://localhost:9100/
安装Kibana:
sudo docker pull kibana:6.6.1
可以使用--link连接到elasticsearch容器
sudo docker run -it -d --name kibana -p 5601:5601 kibana:7.3.0
修改kibana.yml中的es地址
重启:sudo docker restart kibana
访问:
http://192.168.70.31:5601/
安装logstash:
sudo docker pull logstash:7.3.1
sudo docker run --name logstash logstash:7.3.0
sudo docker exec -it logstash /bin/bash
修改config配置文件 vi logstash.yml
修改pipeline配置文件 vi logstash.conf
上传Jar包到Docker Registry私库:
注意:Registry私库不需要登录即可上传,二harbor需要登录,无法使用jib上传
在pom文中添加如下配置并修改,开启私库http支持,然后使用package打包即可推送至私库
<build><plugins><!--mvn build 插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--jib 构建插件--><plugin><groupId>com.google.cloud.tools</groupId><artifactId>jib-maven-plugin</artifactId><version>0.9.8</version><!--加了这段代码,构建命令 使用mvn package 否则 使用mvn compile jib:dockerBuild --><executions><execution><phase>package</phase><goals><goal>build</goal></goals></execution></executions><!--加了这段代码,构建命令 使用mvn package 否则 使用mvn compile jib:dockerBuild --><configuration><!--from 如果使用aliyun的registry.cn-hangzhou.aliyuncs.com进行加速,需要在mvn配置文件setting.xml添加下面配置<servers><server><id>registry.cn-hangzhou.aliyuncs.com</id><username>你的阿里云账号</username><password>你的阿里云密码</password></server></servers>--><from><image>openjdk:8-jre-alpine</image></from><!--构建的images 名字 和 tag(自定义)--><to><image>192.168.70.31:5000/${project.artifactId}:${project.version}</image></to><allowInsecureRegistries>true</allowInsecureRegistries></configuration></plugin></plugins>
</build>

Docker操作查询:

docker search  hello-docker  # 搜索hello-docker的镜像
docker search centos # 搜索centos镜像
docker pull hello-docker # 获取centos镜像
docker run  hello-world   #运行一个docker镜像,产生一个容器实例(也可以通过镜像id前三位运行)
docker image ls  # 查看本地所有镜像
docker images  # 查看docker镜像
docker image rmi hello-docker # 删除centos镜像
docker ps  #列出正在运行的容器(如果创建容器中没有进程正在运行,容器就会立即停止)
docker ps -a  # 列出所有运行过的容器记录
docker save centos > /opt/centos.tar.gz  # 导出docker镜像至本地
docker load < /opt/centos.tar.gz   #导入本地镜像到docker镜像库
docker stop  `docker ps -aq`  # 停止所有正在运行的容器
docker  rm `docker ps -aq`    # 一次性删除所有容器记录
docker rmi  `docker images -aq`   # 一次性删除所有本地的镜像记录# 1. 后台运行一个docker
docker run -d centos /bin/sh -c "while true;do echo 正在运行; sleep 1;done"# -d  后台运行容器# /bin/sh  指定使用centos的bash解释器# -c 运行一段shell命令# "while true;do echo 正在运行; sleep 1;done"  在linux后台,每秒中打印一次正在运行
docker ps  # 检查容器进程
docker  logs  -f  容器id/名称  # 不间断打印容器的日志信息
docker stop centos  # 停止容器# 2. 启动一个bash终端,允许用户进行交互
docker run --name mydocker -it centos /bin/bash# --name  给容器定义一个名称# -i  让容器的标准输入保持打开# -t 让Docker分配一个伪终端,并绑定到容器的标准输入上# /bin/bash 指定docker容器,用shell解释器交互

DockerFile 详解:

FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base imageLABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“yc_uuu@163.com"#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vimPython-dev #反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test # 如果没有就自动创建
WORKDIR demo # 再进入demo文件夹
RUN pwd     # 打印结果应该是/test/demoADD and COPY
ADD hello /  # 把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录
ADD test.tar.gz /  # 添加到根目录并解压WORKDIR /root
ADD hello test/  # 进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径
COPY hello test/  # 等同于上述ADD效果ADD与COPY- 优先使用COPY命令-ADD除了COPY功能还有解压功能
添加远程文件/目录使用curl或wgetENV # 环境变量,尽可能使用ENV增加可维护性
ENV MYSQL_VERSION 5.6 # 设置一个mysql常量
RUN yum install -y mysql-server=“${MYSQL_VERSION}”
进阶知识(了解)
VOLUME and EXPOSE
存储和网络RUN and CMD and ENTRYPOINT
RUN:执行命令并创建新的Image Layer
CMD:设置容器启动后默认执行的命令和参数
ENTRYPOINT:设置容器启动时运行的命令Shell格式和Exec格式
RUN yum install -y vim
CMD echo ”hello docker”
ENTRYPOINT echo “hello docker”Exec格式
RUN [“apt-get”,”install”,”-y”,”vim”]
CMD [“/bin/echo”,”hello docker”]
ENTRYPOINT [“/bin/echo”,”hello docker”]通过shell格式去运行命令,会读取$name指令,而exec格式是仅仅的执行一个命令,而不是shell指令
cat DockerfileFROM centosENV name DockerENTRYPOINT [“/bin/echo”,”hello $name”]#这个仅仅是执行echo命令,读取不了shell变量ENTRYPOINT  [“/bin/bash”,”-c”,”echo hello $name"]CMD
容器启动时默认执行的命令
如果docker run指定了其他命令(docker run -it [image] /bin/bash ),CMD命令被忽略
如果定义多个CMD,只有最后一个执行ENTRYPOINT
让容器以应用程序或服务形式运行
不会被忽略,一定会执行
最佳实践:写一个shell脚本作为entrypoint
COPY docker-entrypoint.sh /usr/local/bin
ENTRYPOINT [“docker-entrypoint.sh]
EXPOSE 27017
CMD [“mongod”][root@master home]# more Dockerfile
FROm centos
ENV name Docker
#CMD ["/bin/bash","-c","echo hello $name"]
ENTRYPOINT ["/bin/bash","-c","echo hello $name”]

Docker实践总结相关推荐

  1. Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享

    架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...

  2. Docker实践:Cannot connect to the Docker daemon.

    Docker实践:Cannot connect to the Docker daemon. 查看docker daemon是否在运行 [root@localhost openec]#  ps aux ...

  3. 携程Docker实践

    原文地址:http://www.iteye.com/news/31468         请点击原文阅读 ---------------------以下是原文--------------------- ...

  4. Docker实践(七)部署SpringBoot微服务

    目录 打包 编写DockerFile 构建镜像 创建容器并启动容器 测试 打包 使用maven或者其他构建工具,打包可运行jar或者war,这里使用可运行jar进行部署. 编写DockerFile 创 ...

  5. docker实践(2)常用命令和DockerFile详解

    <docker实践(1) 入门和springBoot实践部署> <docker实践(2)常用命令和DockerFile详解> <docker实践(3) 仓库registr ...

  6. Windows 10中的Docker实践

    题记 微软在人们的心目中就是商业化的代名词,操作系统.Office.数据库.Azure等可能是我们耳熟能详的,当然微软也在布局更多的技术王国.开源界对微软一直嗤之以鼻,指责其闭源行为影响技术的发展,不 ...

  7. Docker实践7:容器与主机拷贝数据

    在Docker实践2中使用-v参数将主机与容器中相关目录联系在一起(挂载),所以我们可以用这个通道将想要互相拷贝的数据放入其中,这样就可以用cp命令来复制文件了. 除了这个办法,我们还可以分别用不同的 ...

  8. Docker实践(五)docker部署MySQL5.7

    目录 1,安装 2,选择镜像 3,下载镜像. 4,准备部署 5,创建并启动 6,测试 使用docker容器部署mysql5.7 1,安装 没有docker,首先安装docker,参照Docker简单实 ...

  9. docker实践第二版pdf 网盘_【漫画】什么是 docker?docker 应用场景解析

    郑重声明:漫画人物和故事情节均是原创,未经同意禁止任何形式的转载,侵权将进入法律程序.大佬除外. 小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了 ...

最新文章

  1. php 反序列化工具 phpggc 简介
  2. 【响应式Web前端设计】!important的用法及作用
  3. Linux 内核开发 - Eclipse内核开发环境搭建
  4. Java实现大数乘法_java实现大数加法、乘法(BigDecimal)
  5. 【新星计划】Python print输出带颜色 总结
  6. python2.7安装matplotlib_Python安装Numpy和matplotlib
  7. java 类 null_深入理解java中的null“类型”
  8. Nginx handler模块
  9. 卸载mysql数据库命令,值得推荐!
  10. java同步synchronized
  11. html表单鼠标悬停变色,当我将鼠标悬停在html表格中时,更改单元格中颜色的颜色...
  12. VScode 亮暗 高对比度 主题推荐
  13. MediaType介绍
  14. 23种设计模式——最好理解的代理模式
  15. [NOIp 2014]解方程
  16. iPad做Windows扩展屏
  17. 思维模型 5W2H分析法
  18. SaltStack常用的模块
  19. 树莓派基于PS2操纵杆的飞机大战小游戏
  20. 玫瑰花(C语言代码)

热门文章

  1. VGA、QVGA、WVGA、HVGA名词解释及区别
  2. MapReduce学习之概述和设计构思
  3. 征途手机版服务器维护,征途手机版手游开服表_征途手机版手游开服时间表_新服新区预告_第一手游网...
  4. DNA双螺旋结构是大自然长期进化的结果
  5. Docker 从入门到入坑。
  6. XV Open Cup named after E.V. Pankratiev. GP of Siberia-Swimming
  7. Docker desktop 4.7版本安装提示无法访问d3dcompiler_47.dll文件解决方法
  8. java 区位码转中文_Java根据汉字生成区位码公共类
  9. CMD命令下获取昨日日期
  10. Linux----软件安装及程序管理