Docker 专题总结
Docker 专题总结
Docker 的基本命令
启动 Docker
$ systemctl start docker
停止Docker
$ systemctl stop docker
重启Docker
$ systemctl restart docker
开启自启动Docker
$ systemctl enable docker
查看Docker的概要信息
$ docker info
查看Docker的帮助文档
$ docker --help
查看Docker的版本信息
$ docker version
Docker 镜像的常用命令
docker images 列出本机所有镜像
$ docker images
列出本机所有镜像 :
标签 说明 REPOSITORY 镜像的仓库源 TAG 镜像的标签(版本)同一个仓库有多个TAG的镜像,多个版本;我们用REPOSITORY:TAG来定义不同的镜像; IMAGE ID 镜像ID,镜像的唯一标识 CREATE 镜像创建时间 SIZE 镜像大小 列出镜像可选参数
OPTIONS 可选参数: -a 显示所有镜像(包括中间层) -q 只显示镜像ID -qa 可以组合 --digests 显示镜像的摘要信息 --no-trunc 显示完整的镜像信息 docker search 搜索镜像
$ docker search
和 https://hub.docker.com/ 这里的搜索效果一样;
OPTIONS可选参数:
可选参数 说明 --no-trunc 显示完整的镜像描述 -s 列出收藏数不小于指定值的镜像 --automated 只列出Docker Hub自动构建类型的镜像 docker pull 下载镜像
docker pull 镜像名称:[TAG]
注意:不加TAG,默认下载最新版本latest
删除单个镜像
# 1,删除单个:
docker rmi 镜像名称:[TAG]
如果不写TAG,默认删除最新版本latest
有镜像生成的容器再运行时候,会报错,删除失败;
我们需要加 -f 强制删除
docker rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]
$ docker rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]
删除全部
$ docker rmi -f $(docker images -qa)
Docker容器常用命令
查看正在运行的容器
$ docker ps [OPTIONS] $ docker ps 查看正在运行的容器 $ docker ps -a 查看所有容器 $ docker ps -n 2 显示最近创建的2个容器 $ docker ps -f status=exited 查看停止的容器
OPTIONS说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
容器停止退出
$ exit #容器停止退出
$ ctrl + P + Q #容器不停止退出
进入容器
$ docker attach 容器ID or 容器名
启动容器
$ docker start 容器ID or 容器名
重启容器
$ docker restart 容器ID or 容器名
停止容器
$ docker stop 容器ID or 容器名 #暴力删除,直接杀掉进程 (不推荐)
docker kill 容器ID or 容器名
删除容器
$ docker rm 容器ID #如果删除正在运行的容器,会报错,我们假如需要删除的话,需要强制删除;
$ docker rm -f 容器ID #删除多个容器
$ docker rm -f 容器ID1 容器ID2 中间空格隔开 #删除所有容器
docker rm -f $(docker ps -qa)
docker宿主机和容器间文件拷贝
#宿主机文件 copy to 容器内
docker cp 需要拷贝的文件或者目录 容器名称:容器目录
# 比如 docker cp /home/data/001.jpg 6498bcb8d66f /home/data/001.jpg #容器内 copy to 宿主机
docker cp 容器名称:容器目录 宿主机目录
docker 查看容器日志
$ docker logs [OPTIONS] CONTAINER
#也可以去docker日志文件目录查找,docker日志文件目录 /var/lib/docker/containers/
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟) --tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
docker 查看容器进程
$ docker top 容器ID
docker 进入容器执行命令,直接操作容器,执行完 回到 宿主主机终端;
我们一般用于 启动容器里的应用 比如 tomcat nginx redis elasticsearch等等
$ docker exec -it 容器名称 或者 容器ID /bin/bash
提交运行时容器成为镜像
docker commit -a='作者' -m='备注' 运行时容器ID 新镜像名称
容器端口映射
# 端口映射;
$ docker run -it -p 8888:8080 镜像ID
$ docker run -it -P 镜像ID
创建并启动容器
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 启动普通容器
$ docker run --name 别名 镜像ID
# 启动交互式容器 运行一个容器 取别名 交互模式运行 以及分配一个伪终端
$ dokcer run -it --name 别名 镜像ID
# 守护式方式创建并启动容器,执行完命令后,终端依然再宿主机上;
$ docker run -di --name 别名 镜像ID
#启动容器,并执行/bin/bash命令;
$ docker run -it --name 别名 镜像ID /bin/bash命令
--name="容器新名字":为容器指定一个名称;
-i:以交互模式运行容器,通常与-t或者-d同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-d: 后台运行容器,并返回容器ID;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
Docker目录挂载
简介:容器目录挂载,我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以实现宿主机和容器目录的双向自动同步;
作用:前面的 cp 命令来实现数据传递,这种方式比较麻烦;我们通过容器目录挂载,能够轻松实现代码上传,配置修改,日志同步等需求;
语法:
#单个目录挂载
$ docker run -it -v /宿主机目录:/容器目录 镜像名 #多个目录挂载
$ docker run -it -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名 #挂载目录只读:
$ docker run -it -v /宿主机目录:/容器目录:ro 镜像名
注意:
如果同步的是多级目录,可能会出现权限不足的提示;
这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要在启动命令后添加 --privileged=true 来解决挂载的目录没有权限的问题;
Docker tomcat端口映射的坑
问题描述:启动容器后,外网无法映射访问 Tomcat
排查思路:
查看firewall-cmd --state,添加策略对外打开指定的端口
#查看
firewall-cmd --list-ports
firewall-cmd --list-services #添加策略
firewall-cmd --add-port=5000/tcp --permanent
firewall-cmd --remove-port=5000/tcp --permanent
firewall-cmd --reload
查看 sysctl net.ipv4.ip_forward 是否转发 0-未转发 1-转发
查看容器 tomcat的 webapp目录下是否存在文件,讲webapp.dist目录内文件 拷贝至wepapp
Docker 配置 Tomcat
配置思路:先进行镜像的拉取安装,然后指定端口启动并进入容器。在本地建立Tomcat 同级目录,并将容器Tomcat目录下内容拷贝至宿主机,再进行宿主机与容器之间的挂载,这样容器与宿主机间的数据关系就同步了。
配置步骤:
安装镜像并运行容器
$ docker pull tomcat:8.5.31
$ docker run -di -p 8888:8080 镜像id
宿主机里home目录下新建tomcat目录,复制容器里conf,webapps到宿主机
$ docker cp 容器id:/usr/local/tomcat/conf /home/tomcat/
$ docker cp 容器id::/usr/local/tomcat/webapps /home/tomcat/
把容器里的tomcat里的webapp,logs,conf挂载到宿主机tomcat目录下,方便上传代码,同步持久化日志,以及方便配置tomcat;关掉容器,启动容器;
$ docker run -d --name 容器名称 -p 80:8080 -v /home/tomcat/conf/:/usr/local/tomcat/conf/
-v /home/tomcat/webapps/:/usr/local/tomcat/webapps/
-v /home/tomcat/logs/:/usr/local/tomcat/logs/ 镜像名称
配置tomcat server.xml 以及 同步上传war包
<Context path="" docBase="/usr/local/tomcat/webapps/WebTest" debug="0" reloadable="true" />
Docker 配置 MySQL
简介:docker安装MySQL 和 安装Tomcat 差不太多,这边主要介绍下配置思路
安装步骤:
拉取需要的MySQL镜像
$ docker pull mysql:5.7
创建宿主机挂载目录,存储MySQL配置文件、数据文件及相关日志信息
$ docker cp 容器id:/etc/mysql/conf.d /home/mysql/
$ docker cp 容器id:/var/log /home/mysql/
$ docker cp 容器id:/var/lib/mysql /home/mysql/
创建并运行容器,端口指定,目录挂载
$ docker run -p 3306:3306 -d -v /etc/mysql/conf.d/:/home/mysql/conf/
-v /var/log:/home/mysql/log/ -v /var/lib/mysql/:/home/mysql/mysql/
-e MYSQL_ROOT_PASSWORD=123456 镜像ID
用sqlyog连接docker里的数据库,导入sql脚本
注意事项:
运行的项目里的数据库连接地址,要写docker里的mysql容器所在的虚拟IP地址;容器间通信IP;
# 查看 inspect中的 "IPAddress": "172.17.0.2" 信息 项目中locahost 替换为容器IPAddress 地址
$ docker inspect 容器ID
Docker迁移与备份
大公司开发过程中,经常自定义镜像,然后commit提交成镜像到本地仓库,但是我们发布到客户服务器的时候,可以用前面讲得发布到hub官方,或者阿里云,但是有些机密性的项目,是禁止公网存储的,所以我们只能通过docker镜像备份和迁移实现。
实现方式:
#备份镜像
$ docker save -o 备份镜像的名称 源镜像名称:tag版本
比如: $ docker save -o mytomcat7.1.tar java1234/tomcat7:7.1 #将打好的tar 进行sftp或网络传输 可实现自定义镜像的恢复
$ docker load -i 镜像文件
比如:$ docker load -i mytomcat7.1.tar
DockerFile
简介:
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于操作系统(centos或者Ubuntu)基础镜像并最终创建的一个新镜像;通过用手工的方式,修改配置文件,或者添加,删除文件目录的方式,来构建一种新镜像;这种手工方式麻烦,容易出错,而且不能复用;Dockerfile使用脚本方式来构建自动化,可复用的,高效率的创建镜像方式,是企业级开发的首选方式;
在软件系统开发生命周期中,采用Dockerfile来构建镜像;
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
DockerFile常用指令
#定义了使用哪个基础镜像启动构建流程
FROM image_name:tag #声明镜像维护者信息
MAINTAINER user_info #设置环境变量(可以写多条)
ENV key value #构建容器时需要运行的命令(可以写多条)
RUN command #设置终端默认登录进来的工作目录
WORKDIR path_dir #当前容器对外暴露出的端口
EXPOSE port #将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
ADD source_dir/file dest_dir/file #和ADD相似,但是如果有压缩文件是不能解压
COPY source_dir/file dest_dir/file #创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
VOLUME #指定容器启动时要运行的命令,假如有多个CMD,最后一个生效
CMD #指定容器启动时要运行的命令
ENTRYPOINT #当构建一个被继承的Dockerfile时运行的命令,父镜像在被子镜像继承后父镜像的onbuild被触发。可以把ONBUID理解为一个触发器。
ONBUILD
DockerFile构建自定义CentOS
#第一步:编写DockerFile FROM centos
MAINTAINER zhangtao<zhangtao2021@126.com> LABEL name="zhangtao CentOS Image" \ build-date="20210316" ENV WORKPATH /home/
WORKDIR $WORKPATH RUN yum -y install net-tools
RUN yum -y install vim EXPOSE 80
CMD /bin/bash #2.通过DockerFile构建镜像
构建 docker build -f myCentosDockerFile -t zhangtao/mycentos:1.1 . #3:测试运行镜像
运行 docker run -it 镜像ID #4.查看镜像历史
查看镜像历史 docker history 镜像ID
DockerFile通过VOLUME实现容器卷
简介:前面用启动命令 -v 宿主机目录:容器卷目录 来实现容器卷目录挂载。但是由于定义Dockerfile的时候,并不能保证在所有的宿主机上都有这样的特定目录,所以在Dockerfile定义中,只能指定容器卷目录;
语法:
#编写DockerFile FROM centos VOLUME ["/home/v1","/home/v2"] CMD /bin/bash #构建
$ docker build -f myVolumeDockerFile -t zhangtao/myTest:1.1 . #运行
$ docker run -it 镜像ID容器运行后,进入home目录,找到v1,v2两个容器卷目录;然后我们通过 docker inspect 容器ID 来查看下默认生成的容器卷对应的宿主机目录,通过新建文件和 修改,实现容器卷同步
Docker 专题总结的更多相关文章
- docker专题(2):docker常用管理命令(上)
http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备 ...
- docker专题 从入门到放弃
1.docker是什么 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚 ...
- Docker镜像与容器命令 专题
https://yeasy.gitbooks.io/docker_practice/content/install/mirror.html docker的工作流程图: 至少需要配备三样东西去使用doc ...
- 🏆【CI/CD技术专题】「Docker实战系列」(1)本地进行生成镜像以及标签Tag推送到DockerHub
背景介绍 Docker镜像构建成功后,只要有docker环境就可以使用,但必须将镜像推送到Docker Hub上去.创建的镜像最好要符合Docker Hub的tag要求,因为在Docker Hub注册 ...
- Linux下Docker安装
1 在 CentOS 6.4 上安装 docker docker当前官方只支持Ubuntu,所以在 CentOS 安装Docker比较麻烦(Issue #172). docker官方文档说要求 ...
- Docker技术学习
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1598249 貌似Doc ...
- spring cloud 专题一 (spring cloud 入门搭建 之 Eureka注册中心搭建)
一.前言 本文为spring cloud 微服务框架专题的第一篇,主要讲解如何快速搭建spring cloud微服务及Eureka 注册中心 以及常用开发方式等. 本文理论不多,主要是傻瓜式的环境搭建 ...
- spring cloud 专题二(spring cloud 入门搭建 之 微服务搭建和注册)
一.前言 本文为spring cloud 微服务框架专题的第二篇,主要讲解如何快速搭建微服务以及如何注册. 本文理论不多,主要是傻瓜式的环境搭建,适合新手快速入门. 为了更好的懂得原理,大家可以下载& ...
- ubuntu 15 安装docker
最近听说Docker很火,不知道什么东西,只知道是一个容器,可以跨平台.闲来无事,我也来倒弄倒弄.本文主要介绍:Ubuntu下的安装,以及基本的入门命令介绍:我的机器是Ubuntu 15.04 64位 ...
随机推荐
- Pymongo 笔记
Pymongo 1.MongoDB概念 MongoDB是一种非关系型数据库(NoSQL),MongoDB数据存储于内存,内存不足则将热度低数据写回磁盘.存储的数据结构为文档.每个数据库包含若干集合(c ...
- u-boot 移植 --->5、友善之臂Tiny210底板王网卡驱动移植
网卡芯片的工作原理 DM9000AE具有以下主要性能: ①48管脚的LQFP封装,管脚少体积小: ②支持8/16位数据总线: ③适用于10Base-T和100Base-T,10/100M自适应,适应不 ...
- USB2.0协议学习笔记---描述符
USB设备描述符 字段名 长 度(字节) 地址偏移 含 义 bLenth 1 0 描述符长度 bDescriptorType 1 1 描述符类型 (这里为 1) ...
- Windows中VS code无法查看C++ STL容器的值 - 解决方法
Windows中VS code debug时无法查看C++ STL容器内容 首先,你很可能用的是x64版本的Windows. 我发现一个有效的解决方法,但在x64版本的Windows上安装MinGW时 ...
- JavaScript 词法 All In One
JavaScript 词法 All In One JavaScript 词法 这部分描述了JavaScript 的词法(lexical grammar). ECMAScript 源码文本会被从左到右扫 ...
- GitHub SSH key
GitHub SSH key https://help.github.com/en/github/authenticating-to-github steps HTTPS clone !== SSH ...
- how to read the system information by using the node cli tool?
how to read the system information by using the node cli tool? node cli & get system info demos ...
- .dmg & .pkg & .ipa
.dmg & .pkg & .ipa Apple, macOS, iOS .dmg mysql-8.0.21-macos10.15-x86_64.dmg https://dev.mys ...
- AIoT & IoT
AIoT & IoT Artificial Intelligence of Things Internet of Things AIoT === AI + IoT 人工智能物联网 === 人工 ...
- React-Native Tutorials
React-Native Tutorials https://egghead.io/courses/react-native-fundamentals part free https://egghea ...