目录
1 docker常用命令
0启动docker
systemctl start docker
1.1 镜像命令
docker images #查看本地镜像
docker search 镜像名 docker search 镜像名 -fillter=条件=? #查看hub.docker中的镜像/条件查询
docker pull 镜像名 #拉取镜像
docker rmi -f 镜像名 #删除镜像 docker rmi -f $(docker images -aq) #删除所有镜像
1.2容器命令
1.2.1开启容器
docker run --name 镜像别名 镜像名 #开启一个容器
docker run -d “镜像名” #后台方式运行一个容器
docker run -it “镜像名” #交互运行一个容器(常用)
docker run -p 8080:8080 #指定端口运行
docker run -P #随机端口运行
1.2.2 容器ps
docker ps -a #查看容器全部历史
docker ps -n=? #查看n个
docker ps -aq #查全部 只显示容器id
1.2.3 退出容器
exit #停止并推出
CTRL + P +Q #推出不停止
1.2.4删除容器
docker rm 容器id #删除
docker rm -f $(docker ps -aq) #删除全部
docker ps -a -q|xargs docker rm #查看后删除全部
1.2.5启停容器
docker start 容器id
docker restart 容器id #重启
docker stop 容器id #停止
docker lill 容器id #强制停止
#后台运行容器时,必须有一个前台进程
1.2.6查看日志
docker logs -f -t 容器id #查看指定容器日志
docker logs -tf 容器id
docker logs -t -f tail? 容器id #查看?条日志
1.2.7查看docker内进程
docker top 容器id
1.2.8查看容器元数据
docker inspect 容器id
1.2.9进入正在运行的容器
docker exec -it 容器id
docker exec -it 容器id /bin/bash
docker attach 容器id
#exec 进去容器后开启一个新终端,进行操作,attach 进去容器当前正在执行的终
1.2.10拷贝容器内部文件至外部
docker cp 容器id:/xx/xx/xxx /xx/xx
docker cp 容器id: 容器内部路径 目的主机路径
例: docker run -d --name nginx01 -p 8081:80 nginx #以后台方式运行nginx 别名nginx01 指定外部端口8081 内部端口80
例: docker run -d --name tomcat01 -p 8082:8080 tomcat:9.0 #
例: docker exec -it nginx01 /bin/bash # /bin/bash 进入终端
#使用docker 阿里云镜像仓库 默认都是最小镜像 会阉割部分内容,如tomca 容器运行后 缺少欢迎页等。保证最小运行环境
#安装portainer(docker可视化工具)
docker run -d -p 8083:9000 --restart=always -v /var.run.docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
docker run -d --name portainer -p 8083:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
访问后首次出现设置密码页面
#docker镜像加载原理(联合文件系统unionfs)
特性: 一次同时加载多个文件系统,联合加载会把各层文件系统叠加起来. 最终的文件系统会包含所有底层文件和目录。
1.2.11commit镜像
docker commit -a="tomcattest" -m="cp webapps.dxxx in webapps" 5b6c34faa8ba tomcattest
docker commit -a="别名" -m="备注" 容器id 新容器id
#将改动后的容器 提交成一个新的镜像
1.2.12docker 部署elasticsearch
省略查询镜像,pull镜像
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch
#elasticsearch 耗内存 设置最小64m 最大512m
1.2.13docker容器数据卷
什么是容器数据卷:容器之间有一个数据共享的技术 docker容器中产生的数据,可以同步到本地,容器删除数据还在。(容器的持久化和同步操作)
双向绑定,容器内部与本地数据同步变化
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录 镜像名
docker run -it -v /home/volumtest:/home centos /bin/bash
#运行centos镜像 将容器内home目录下的数据同步至 本机 /home/volumtest目录下
#mysql实战
docker run -d -p 8083:3306 -v /home/maozi/volumtest/mysql/conf:/etc/mysql/conf.d -v/home/maozi/volumtest/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=907353 --name mysql01 mysql:8.0
#启动mysql 指定端口 设置密码 同时挂载 conf.d 文件与 mysql的data至本地目录
1.2.14具名和匿名挂载
#匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx #随机端口启动nginx,匿名挂载内部目录/ect/nginx ,这里没有指定本机目录
#具名挂载
docker run -d -P --name nginx02 -v jumingnginx:/etc/nginx nginx
#查看数据卷
docker volume ls #查看数据卷 匿名挂载的是一长串码 具名则是自己的命名
docker volume inspect 数据卷名 #查看数据卷具体信息
#所有的docker容器的数据卷,没有指定目录情况下 都在 /var/lib/docker/volumes/xxxx/...里
-v 容器内路径 #匿名挂载 -v 卷名:容器内路径 #匿名挂载 -v /宿主机路径:容器内路径 #指定路径挂载
#拓展
#通过 -v 容器内路径:ro 或rw 改变读写权限 ro 只读 rw可读可写
一点这个设置了ro权限,就说明这个路径只能通过宿主机来操作,容器无权操作
1.2.15初识dockerfile
#创建一个dockerfile文件,文件中的内容明亮大写
FROM CENTOS
VOLUME ["volume01","volume02"]
CMD echo "--end---"
CMD /bin/bash
docker build -f /home/maozi/volumtest/dockerfile01 -t maozi_centos:1.0 .
docker build -f 脚本目录 -t 新镜像名 .
#根据脚本生成一个新镜像
基础知识:
1.保留每个关键字(指令)都是大写 2.执行顺序从上到下 3.#表示注释 4.每一个指令都会创建一个新的镜像层,并提交。
#DockerFile的指令
FROM #基础镜像
MAINTAINER #镜像是谁写的 姓名+...
RUN #镜像构建的时候需要运行的命令
ADD #添加的内容: 比如tomcat压缩包等
WORKDIR #镜像的工作目录
VOLUME #挂载的目录 (数据卷)
EXPOSE #端口
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器地洞的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承dockerfile 这个是运行ONBUILD的指令
COPY #类似ADD 将文件拷贝到镜像中
ENV #构建的时候设置环境变量
1.2.16数据卷共享 --volume-from
例:docker run -it --name maozicentos01 maozi_centos:1.0
docker run -it --name maozicentos02 --volume-from maozicentos01 maozi_centos:1.0
docker run -it --name 容器名 --volume-from 父容器名 镜像名:版本号
#实现mysql数据共享
docker run -d -p 8083:3306 -v /home/maozi/volumtest/mysql/conf:/etc/mysql/conf.d -v/home/maozi/volumtest/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=907353 --name mysql01 mysql:8.0
docker run -d -p 8083:3306 -e MYSQL_ROOT_PASSWORD=907353 --name mysql02 --volumes -from mysql01 mysql:8.0
数据卷的生命周期一直持续到没有容器其使用位置,如果持久化到了本地,则持久存在
安装Docker(yum安装)
基于 CentOS 7 安装
-
官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/
-
确定你是CentOS7及以上版本
[root@192 Desktop]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
-
yum安装gcc相关(需要确保 虚拟机可以上外网 )
yum -y install gcc yum -y install gcc-c++
-
卸载旧版本
yum -y remove docker docker-common docker-selinux docker-engine # 官网版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
设置stable镜像仓库
# 错误 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ## 报错 [Errno 14] curl#35 - TCP connection reset by peer [Errno 12] curl#35 - Timeout # 正确推荐使用国内的 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新yum软件包索引
yum makecache fast
-
安装Docker CE
yum -y install docker-ce docker-ce-cli containerd.io
-
启动docker
systemctl start docker
-
测试
docker version docker run hello-world docker images