docker基础包含安装、启动、dockerfile、私有仓库建立,docker-compose基础,常用命令等
博客地址:芒果橙的个人博客 【http://mangocheng.com】
参考资料
一个平台,开发者通过容器可用于构建、运行和共享应用。使用容器部署应用统称为容器化。
docker daemon:守护进程,运行在宿主机上
docker client:命令行工具,与docker daemon交互
docker image:镜像,包含需要运行的文件;用来创建container,一个镜像可以运行多个container;镜像通过dockerfile创建,也可以从docker hub/registry上下载
docker container:容器,docker的运行组件,启动一个镜像就是一个容器;容器是一个隔离环境,多个容器之间不会相互影响
docker hub/registry:共享和管理docker镜像,用户可以上传或下载上面的镜像;可以搭建自己私有的docker registry
dockerfile:一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。
相关知识
优势
Ubuntu18环境
添加用户权限
设置加速器
# 1.vim /etc/docker/daemon.json
{"registry-mirrors": ["https://cxuueihg.mirror.aliyuncs.com"]}
# 2.systemctl daemon-reload
# 3.systemctl restart docker
Centos7环境
修改镜像默认存储位置:
requirements.txt依赖制作镜像
使用maven打成jar包
制作Dockerfile文件
二者放在同一个目录,终端编译镜像
# 镜像名字:标签 zuul:v1
# .指定Dockerfile所在目录
sudo docker build -t zuul:v1 .
启动容器
# -p标识端口映射: 宿主机端口:容器端口
sudo docker run --name zuul -d -p 9020:9020 zuul:v1
# -v挂载目录:宿主机目录:容器目录 ;-d 后台运行;-it 交互方式运行(进入容器中)
sudo docker run -dit --name 容器别名 -p 9000:9000 -v /home/dataexa/:/home/dataexa 镜像名字:标签
参考资料
可以通过指定tag标识版本
ENTRYPOINT :配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","-Xmx1024m","-Xms1024m","/swapping.jar"]
# -Djava.security.egd=file:/dev/./urandom
# 添加java.security.egd的系统属性指向/dev/urandom,JVM上的随机数与熵池策略
# -D 是新增参数,参数的名字叫 java.security.egd ,参数的值叫 file:/dev/./urandom,是为了解决随机数生成的问题
# 使用不同的配置文件
# "-Dspring.profiles.active=test"
# "--Dspring.config.location=application.yml"
CMD:使用一些特殊的命令,如source
CMD ["/bin/sh" "-c" "sleep 5; source /data/projects/python/venv/bin/activate && python ./fate_flow/fate_flow_server.py"]
CMD ["/bin/bash", "-c", "source activate python3.5 && python tornado_service.py"]
参考资料
步骤
服务器:192.168.23.23
docker容器工具,通过yml文件定义多docker容器应用,方便快速启动、停止多个容器。
限于单台宿主机,如果跨主机管理容器,可用Docker Smarm或流行K8S
概念
属性包含version、services、networks三大部分
Compose和Docker兼容性
compose文件格式版本 | docker版本 |
---|---|
3.4 | 17.09.0+ |
3 | 1.13.0+ |
2 | 1.10.0+ |
1 | 1.9.1.+ |
# 1.下载:其中1.23.1为版本号,可根据需要修改
sudo curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 2.设置可执行
sudo chmod +x /usr/local/bin/docker-compose
# 3.查看版本
docker-compose -v
# 注意,不可用tab符号作空格
# 版本号
version: "3.1"
# 服务
services:
# 服务名
eureka:
# 镜像名
image: eureka:1.0
# 容器名
container_name: eureka-v1
# 端口
ports:
- "8761:8761"
# 网络模式
network_mode: "bridge"
config:
image: config:1.0
container_name: config-v1
network_mode: "host"
# 依赖的服务
depends_on:
- eureka
zuul:
image: zuul:1.0
container_name: zuul-v1
depends_on:
- eureka
- config
# 自定义网络
networks:
# 默认
default:
driver: bridge
# bridge_net:
# driver: bridge
# host不可再定义,只能有一个
# 查看docker信息
docker info
# 重启docker
service restart docker
# 查找镜像
docker search xxx
# 拉取镜像到本地
docker pull xx
#查看镜像
docker images
#删除镜像
docker rmi image_id
# 根据容器创建新镜像
docker commit 容器名 新镜像名:版本号
# 重命名容器
docker rename 原容器名 新容器名
#给镜像打标签
docker tag image_name image_name:tagName
docker tag hello-world hello_world:v1
# 导出镜像
docker save -o nginx.tar nginx:lates
# 导入镜像
docker load -i nginx.tar
# 查看启动的容器
docker ps
# 从宿主机拷贝到容器里
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
# 删除容器
docker rm container_id|container_name
# 关闭所有容器
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 查看容器挂载的目录
docker inspect container_name | grep Mounts -A 20
# 查看docker占用空间
docker system df
# 查看docker容器-正在运行
docker exec -it [eureka容器id] bash
# ==============docker-compose命令===============
# 启动
docker-compose up -d
# 启动一个其他名称的docker-compose文件
docker-compose -f docker-compose-dev.yml up -d
# 停止/启动一个服务
docker-compose stop|start service_name
# 更新镜像及容器
docker-compose up -d --build
# 验证docker-compose文件是否正确,若正确则不输出
sudo docker-compose config -q
# 查看网络
docker network ls
# 删除网路
docker network rm id
# 激活某个环境conda
source activate snowflakes
# 其他:https://www.cnblogs.com/lirunzhou/p/10601247.html
Dockerfile文件,里面的注释# 要单独一行,否则会被当做参数解析
SpringCloud微服务体系中,网络模式eureka使用bridge,其他的使用host
若后端报错NoRouteToHost,关闭防火墙
systemctl status firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service
容器中使用宿主机的shell命令
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
设置容器内的编码
# 先安装相关命令
apt-get install locales
# 设置编码
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
Dockerfile里执行shell脚本
# 基础镜像
FROM java8-python3.5-conda:1.0.0
# 拷贝项目文件,执行文件
COPY project /code/project
COPY start.sh /code
# 设置工作目录
WORKDIR /code
# 处理脚本
RUN chmod +x start.sh && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 执行脚本
CMD ["sh","start.sh"]
使用Java命令,需要配置在/etc/profile里才行,并且需要刷新环境
source /etc/profile
java -version
解决使用 docker build 时 Sending build context to Docker daemon 数据过大的问题
使用外部的配置文件:试过,貌似不行