docker入门(一)
一、容器化技术
物理机时代->虚拟机时代->容器时代
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
docker pull hello-world
阿里云镜像加速:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://zt5c1k47.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
二、docker 常用命令
docker pull 镜像名<:tags> -从远程仓库抽取镜像
docker images -查看本地镜像
docker run 镜像名<:tags> -创建容器,启动应用
docker ps -查看正在运行中的镜像
docker rm <-f> 容器id -删除容器
docker rmi <-f> 镜像名:<tags> -删除镜像
三、服务启停:
docker run -p 8000:8080 -d tomcat
8000 是宿主机需要开通的端口
8080 是docker内服务的端口
-d 代表后台运行
删除容器
docker rm -f containerId == docker stop containerId ;docker rm containerId
删除镜像
docker rmi tomcat<:tags>
docker rmi -f tomcat<:tags>
四、容器内部结构
1.在容器中执行命令
docker exec -it 容器id 命令
例子:docker exec -it xxxx /bin/bash
2.产看操作系统
cat /proc/version
3.镜像和容器存在宿主机的/var/lib/docker目录下
五、容器的生存周期
六、自定义镜像
Dockerfile 镜像描述文件
1.Dockerfile 是一个包含用于组合镜像的命令的文本文档
2.Docker通过读取Dockerfile中的指令按步自动生成镜像
3.docker build -t 机构/镜像名<:tags> Dockerfile目录
Dockerfile 文件例子:
FROM tomcat:latest 设置基准镜像
MAINTAINER mashibing.com 设置当前镜像由某个机构或者人维护的
WORKDIR /usr/local/tomcat/webapps 用于切换工作目录,如果不存在会自动添加
ADD docker-web ./docker-web 将文件或者目录复制到镜像的某个目录下
(第一个docker-web 是表示在和Dockerfile的同级目录,./docker-web指的是/usr/local/tomcat/webapps/docker-web)
七、Dockerfile基础命令
FROM centos 制作基准镜像(基于centos:lastest)
FROM scratch 不依赖任何基础镜像base image
例子:FROM tomcat:9.0.22-jdk8-openjdk
尽量使用官方提供的Base Image
MAINTAINER mashibing.com
LABEL version =1.0
LABEL description ="马士兵教育"
WORKDIR /usr/local
WORDDIR /usr/local/newdir 自动创建
尽量使用绝对路径
ADD hello / 将hello 目录复制到容器内的根目录下
ADD test.tar.gz / 添加根目录并解压
ADD 除了复制,还具备添加远程文件功能
ENV JAVA_HOME /usr/local/openjdk8 用JAVA_HOME 指代了后面的路径
RUN ${JAVA_HOME}/bin/java -jar test.jar
尽量使用环境常量,可提高程序维护箱
八、Dockerfile 运行指令
RUN:在build构建镜像时执行命令
ENTRYPOINT:容器启动时执行的命令
CMD:容器启动后执行默认的命令或参数
RUN-构建时运行
RUN yum install -y vim #Shell命令格式
RUN ["yum","install","-y","vim"] #EXec命令格式
ENTRYPOINT(入口点)用于在容器启动时执行命令
Dockerfile 中只有最后一个ENTRYPOINT会被执行
ENTRYPOINT["ps"] #推荐执行Exec格式
CMD用于设置默认执行的命令
如DOckerfile中出现多个CMD.则只有最后一个被执行
如容器启动时附加指令,则CMD被忽略
CMD["ps","-ef"] #推荐使用Exec格式
九、docker容器间通信
1.查看容器的明细
Docker inspect containerID
2.docker network ls
3.创建一个网络(可以实现容器之间双向联通)
docker network create -d bridge my-bridge
4.将一个容器添加到到自定义网桥(网络)中
docker network connect my-bridge web
(web 是一个容器名称)
十、Volume容器间共享数据
方式一:通过设置-v挂载宿主机目录
格式:docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
方式二:通过--volumes-from共享容器内挂载点
创建共享容器:docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
共享容器挂载点:docker run --volumes-from webpage --name t1 -d tomcat
十一、docker-compose容器编排工具
docker-compose up -d
docker-compose down
docker logs
docker logs -f 容器名
docker-compose logs 容器名
例子:
version: '3'
services:
zabbix_mysql:
container_name: "zabbix_mysql"
restart: "always"
image: mysql:5.7
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
ports:
- "13306:3306"
environment:
MYSQL_ROOT_PASSWORD: "rootroot"
MYSQL_USER: "zabbix"
MYSQL_PASSWORD: "123456"
MYSQL_DATABASE: "zabbix"
networks:
- front-tier
zabbix_server:
container_name: "zabbix_server"
restart: "always"
image: zabbix/zabbix-server-mysql
ports:
- "10051:10051"
depends_on:
- zabbix_mysql
links:
- zabbix_mysql:mysql
environment:
DB_SERVER_PORT: 3306
DB_SERVER_HOST: "mysql"
MYSQL_USER: "zabbix"
MYSQL_DATABASE: "zabbix"
MYSQL_PASSWORD: "rootroot"
networks:
- front-tier
zabbix_nginx_web:
container_name: "zabbix_nginx_web"
restart: "always"
image: zabbix/zabbix-web-nginx-mysql
ports:
- "8443:443"
- "8888:8080"
depends_on:
- zabbix_mysql
- zabbix_server
links:
- zabbix_mysql:mysql
- zabbix_server:zabbix_server
environment:
DB_SERVER_PORT: 3306
DB_SERVER_HOST: "mysql"
MYSQL_USER: "zabbix"
MYSQL_PASSWORD: "rootroot"
MYSQL_DATABASE: "zabbix"
ZBX_SERVER_HOST: "zabbix_server"
ZBX_SERVER_PORT: 10051
PHP_TZ: "Asia/Shanghai"
networks:
- front-tier
zabbix-agent-a:
image: zabbix/zabbix-agent
ports:
- "10050:10050"
links:
- zabbix_server:zabbix_server
container_name: zabbix-agent-a
restart: always
depends_on:
- zabbix_server
environment:
- ZBX_HOSTNAME=zabbix-agent-a
- ZBX_SERVER_HOST=zabbix_server
- ZBX_SERVER_PORT=10051
networks:
- front-tier
networks:
front-tier:
driver: bridge
grant all on zabbix.* to 'zabbix'@'%' identified by 'rootroot' with grant option;
flush privileges;