旨在记录Docker重点知识及操作,并无概念讲解
Docker重点知识操作汇总
1、Docker安装
注:要求CentOS7及以上版本
1.1 安装Docker
卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum安装gcc
yum -y install gcc
yum -y install gcc-c++
安装需要的软件包
yum install -y yum-utils
设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新包索引
yum makecache fast
安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
启动docker
systemctl start docker
查看docker版本
docker version
查看docker启动状态
systemctl status docker
1.2 卸载docker
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
1.3 阿里云镜像加速
阿里云开发者平台——>控制台——>容器镜像服务——>加速器地址
配置镜像加速器
mkdir -p /etc/docker
vim /etc/docker/daemon.json
# 粘贴以下内容到daemon.json
{
"registry-mirrors": ["https://q4xbpjoo.mirror.aliyuncs.com"]
}
#重启
systemctl daemon-reload
systemctl restart docker
2、Docker常用命令
2.1 启动查看类命令
# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker
# 开机启动:
systemctl enable docker
# 查看docker概要信息
docker info
# 查看docker总体帮助文档
docker --help
# 查看docker命令帮助文档
docker 具体命令 --help
2.2 镜像相关命令
# 列出本地主机上的的镜像
docker images
# 列出本地所有的镜像
docker images -a
# 只显示镜像ID
docker images -q
# 查询镜像
docker search 镜像名字
# --limit: 只列出N个镜像,默认25个
docker search --limit 数字 镜像名字
# 下载镜像
docker pull 镜像名字
# 查看镜像/容器/数据卷所占的空间
docker system df
# 删除单个镜像
docker rmi -f 镜像名字ID
# 删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG
# 删除全部镜像
docker rmi -f $(docker images -qa)
2.3 容器命令
2.3.1 新建+启动容器
docker run -it 镜像ID /bin/bash #交互式启动
docker run -d 镜像ID #后台启动
--name="容器新名字" 为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射,大写P
-p: 指定端口映射,小写p
2.3.2 查询当前正在运行的镜像
docker ps [OPTIONS]
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
# 两种退出方式: exit,ctrl+p+q
# 删除已停止的容器
docker rm 容器ID
# 强制停止容器
docker kill 容器ID或容器名
# 查看容器日志
docker logs 容器ID
# 查看容器内运行的进程
docker top 容器ID
# 查看容器内部细节
docker inspect 容器ID
2.3.3 进入正在运行的容器并以命令行交互
docker exec -it 容器ID /bin/bash
2.3.4 文件在容器与主机间的导入导出
# 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
# export 导出容器的内容留作为一个tar归档文件[对应import命令]
docker export 容器ID > 文件名.tar
# import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
3、Docker镜像容器
Docker镜像commit操作
# commit提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
4、本地镜像发布到阿里云
1、镜像的生成方法
使用commit生成新得镜像
2、将本地镜像推送到阿里云
阿里云开发者平台——>控制台——>容器镜像服务——>实例列表——>个人实例——>创建命名空间——>创建镜像仓库
# 将镜像推送到Registry,修改用户名,镜像ID,镜像仓库名和仓库地域是自动生成的
$ docker login --username=[username] registry.cn-guangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-guangzhou.aliyuncs.com/docker1_001/ubuntu-vim:[镜像版本号]
$ docker push registry.cn-guangzhou.aliyuncs.com/docker1_001/ubuntu-vim:[镜像版本号]
3、从Registry中拉取镜像
docker pull registry.cn-guangzhou.aliyuncs.com/docker1_001/ubuntu-vim:[镜像版本号]
5、本地镜像发布到私有库
1、卸载docker registry 私有库
docker pull registry
2、运行私有库Registry
docker run -d -p 5000:5000 -v /username/myregistry/:/tmp/registry --privileged=true registry
3、commit生成新的镜像
docker commit -m="ifconfig cmd add" -a="username" a69d7c825c4f ubuntuPlus:1.2
4、将新镜像ubuntuPlus:1.2修改符合私服规范的Tag
#公式: docker tag 镜像:Tag Host:Port/Repository:Tag
docker tag ubuntuPlus:1.2 192.168.111.111:5000/ubuntuPlus:1.2
5、修改daemon.json支持HTTP
# 在daemon.json中添加
"insecure-registries": ["192.168.111.111:5000"]
6、push推送到私服库
docker push 192.168.111.111:5000/ubuntuPlus:1.2
7、从私服库pull到本地
docker pull 192.168.111.162:5000/ubuntuPlus:1.2
6、DockerFile操作
6.1 DockerFile常用保留字指令
FROM:当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器构建时需要运行的命令;shell格式:RUN <命令行>,例RUN yum -y install vim;exec格式:RUN [“可执行文件”,“参数1”,“参数2”];RUN是在 docker build时运行
EXPOSE:当前容器对外暴露出的端口
WORKDIR:指定在创建容器后,终端默认的工作目录
USER:指定执行镜像的用户,默认是root
ENV:设置环境变量
ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY:类似ADD,拷贝文件和目录到镜像中
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:指定容器启动后的要干的事情
ENTRYPOINT:指定容器启动时要运行的命令
6.2 Dockerfile文件实例:
FROM centos
MAINTAINER usrname<username@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
7、Docker-compose容器编排
7.1 安装 Docker compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
7.2 Compose常用命令
docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务
docker-compose up -d # 启动所有docker-compose服务并后台运行
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose exec 服务id # 进入容器实例内部
docker-compose ps # 展示当前docker-compose编排过的运行的所有容器
docker-compose top # 展示当前docker-compose编排过的容器进程
docker-compose logs yml里面的服务id # 查看容器输出日志
docker-compose config # 检查配置
docker-compose config -q # 检查配置,有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务
7.3 docker-compose流程
1、编写微服务项目
2、打jar包上传到Linux
3、编写Dockerfile并运行,将项目构建成镜像
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER username
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为spring_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar
# 运行jar包
RUN bash -c 'touch /spring_docker.jar'
ENTRYPOINT ["java","-jar","/spring_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6001
4、编写docker-compose.yml文件
version: "3"
services:
microService:
image: spring_docker:1.0
container_name: sd01
ports:
- "6001:6001"
volumes:
- /app/microService:/data
networks:
- spring_net
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8
ports:
- "6379:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- spring_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'spring'
MYSQL_USER: 'user'
MYSQL_PASSWORD: '123456'
ports:
- "3306:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- spring_net
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
spring_net:
5、执行 docker-compose up或docker-compose up -d
8、Docker轻量级可视化工具Portainer
安装
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
登录:默认用户名和密码为admin
使用:可视化操作docker
9、Docker容器监控之CAdvisor+InfluxDB+Granfana
使用docker-compose构建三件套
version: '3.1'
volumes:
grafana_data: {}
services:
influxdb:
image: tutum/influxdb:0.9
restart: always
environment:
- PRE_CREATE_DB=cadvisor
ports:
- "8083:8083"
- "8086:8086"
volumes:
- ./data/influxdb:/data
cadvisor:
image: google/cadvisor
links:
- influxdb:influxsrv
command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
restart: always
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
grafana:
user: "104"
image: grafana/grafana
user: "104"
restart: always
links:
- influxdb:influxsrv
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- HTTP_USER=admin
- HTTP_PASS=admin
- INFLUXDB_HOST=influxsrv
- INFLUXDB_PORT=8086
- INFLUXDB_NAME=cadvisor
- INFLUXDB_USER=root
- INFLUXDB_PASS=root
```
启动docker-compose文件: docker-compose up
![在这里插入图片描述](https://img-blog.csdnimg.cn/bf686cd3308547f5bd6277eeffcaba3f.png#pic_center)