启动 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 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 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: 指定端口映射,格式为:主机(宿主)端口:容器端口
简介:容器目录挂载,我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以实现宿主机和容器目录的双向自动同步;
作用:前面的 cp 命令来实现数据传递,这种方式比较麻烦;我们通过容器目录挂载,能够轻松实现代码上传,配置修改,日志同步等需求;
语法:
#单个目录挂载
$ docker run -it -v /宿主机目录:/容器目录 镜像名
#多个目录挂载
$ docker run -it -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
#挂载目录只读:
$ docker run -it -v /宿主机目录:/容器目录:ro 镜像名
注意:
如果同步的是多级目录,可能会出现权限不足的提示;
这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要在启动命令后添加 --privileged=true 来解决挂载的目录没有权限的问题;
问题描述:启动容器后,外网无法映射访问 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
配置思路:先进行镜像的拉取安装,然后指定端口启动并进入容器。在本地建立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 和 安装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
大公司开发过程中,经常自定义镜像,然后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是由一系列命令和参数构成的脚本,这些命令应用于操作系统(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
简介:前面用启动命令 -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 来查看下默认生成的容器卷对应的宿主机目录,通过新建文件和 修改,实现容器卷同步
原文:https://www.cnblogs.com/doondo/p/14546184.html