docker

一、docker安装

  • VMware
  • centos7
# 卸载原有docker
yum remove docker docker-common docker-selinux docker-engine -y
# 安装yum工具包(方便配置安装源)和数据存储驱动包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 增加aliyun安装源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 列出docker社区版本安装包
yum list docker-ce --showduplicates | sort -r
# 自动选择最快安装源
yum makecache fast
# 安装docker社区版本
yum install docker-ce -y

二、docker镜像加速配置

# 配置阿里云镜像加速服务(需登录阿里云开通容器镜像服务)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxx.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> - 删除镜像
#示例:-p 端口映射; -d 后台运行
docker run -p 8080:8080 -d tomcat

四、容器内部结构

1.Tomcat容器内部结构

2.容器中执行命令

# 格式: docker exec [-it] 容器ID 命令
# exec 在对应容器中执行命令
# -it 采用交互方式执行命令

#示例
#获取容器ID
docker ps
#进入交互模式
docker exec -it 0738ed2fe68b /bin/bash

五、dockerfile-构建镜像

1.操作说明

Dockerfile是一个包含用于组合镜像的命令的文本文档
Docker通过读取Dockerfile中的指令按步自动生成镜像
docker build -t 机构/镜像名<:tags> Dockerfile目录

2.Dockerfile

FROM tomcat:latest
MAINTAINER com.wod
WORKDIR /usr/local/tomcat/webapps
ADD docker-web ./docker-web

3.docker-web/index.html

<h1>hello docker by yhm!</h1>

4.创建镜像

#执行命令
docker build -t com.wod/mywebapp:1.0 ./
#输出:dockerfile中的每一行对应输出的每一步
Sending build context to Docker daemon  3.584kB
Step 1/4 : FROM tomcat:latest
 ---> 2ae23eb477aa
Step 2/4 : MAINTAINER com.wod
 ---> Running in 4ae48a693627
Removing intermediate container 4ae48a693627
 ---> dfa6df5cc13c
Step 3/4 : WORKDIR /usr/local/tomcat/webapps
 ---> Running in f4e9e5ae4fe1
Removing intermediate container f4e9e5ae4fe1
 ---> 870f60b9a094
Step 4/4 : ADD docker-web ./docker-web
 ---> 1d415065d410
Successfully built 1d415065d410
Successfully tagged com.wod/mywebapp:1.0

5.镜像创建分层的意义

  • dockerfile中的每一步对应一步输出,并且都会有一个临时容器id(形如 ---> Running in 4ae48a693627)

  • 此容器id会作为容器缓存,在再次创建镜像并且有相同步骤时自动使用缓存的容器id以加快创建操作

形如:Step 2/3 : RUN ["echo","haha1"]
---> Using cache
---> 086593d87636

六、dockerfile常用命令

1.FROM - 基于基准镜像

FROM centos #制作基准镜像(基于centos:lastest)
FROM scratch #不依赖任何基准镜像base image
FROM tomcat: 9.0.22-jdk8-openjdk
尽量使用官方提供的Base Image

2.LABEL & MAINTAINER - 说明信息

MAINTAINER wod.com
LABEL version = "1.0"
LABEL description = "wod"

3.WORKDIR - 设置工作目录

WORKDIR /usr/local
WORKDIR /usr/local/newdir #自动创建
尽量使用绝对路径

4.ADD & COPY - 复制文件

ADD hello / #复制到根路径
ADD test.tar.gz / #添加根目录并解压
ADD 除了复制,还具备添加远程文件功能

5.ENV - 设置环境常量

ENV JAVA_HOME /usr/local/openjdk8
RUN ${JAVA_HOME}/bin/java -jar test.jar
尽量使用环境常量,可提高程序维护性

6.EXPOSE - 暴露容器端口

将容器内部端口暴露给物理机
EXPOSE 8080
docker run -p 8000:8080 tomcat

七、dockerfile执行命令

1.RUN & CMD & ENTRYPOINT

RUN : 在Build构建时执行命令
ENTRYPOINT : 容器启动时执行的命令
CMD : 容器启动后执行默认的命令或参数

2.RUN-构建时运行

RUN yum install -y vim #Shell 命令格式
RUN ["yum","install","-y","vim"] #Exec命令格式

3.ENTRYPOINT启动命令

ENTRYPOINT(入口点)用于在容器启动时执行命令
Dockerfile中只有最后一个ENTRYPOINT会被执行
ENTRYPOINT ["ps"] #推荐使用Exec格式

4.CMD默认命令

CMD用于设置默认执行的命令

如Dockerfile中出现多个CMD,则只有最后一个被执行

如容器启动时附加指令,则CMD被忽略

CMD ["ps" , "-ef"] #推荐使用Exec格式

5.ENTRYPOINT、CMD联合使用

FROM centos
RUN ["echo","haha1"]
ENTRYPOINT ["ps"]
CMD ["-ef"]
  • CMD可被替换

    docker run dockerrun -aux
    

八、实例dockerfile

FROM centos
RUN ["yum", "install", "-y", "gcc", "gcc-c++", "net-tools", "make"]
WORKDIR /usr/local
ADD redis-5.0.5.tar.gz .
WORKDIR /usr/local/redis-5.0.5/src
RUN make & make install
WORKDIR /usr/local/redis-5.0.5
ADD redis.conf .
EXPOSE 6379
CMD ["redis-server", "redis.conf"]

九、基于link进行容器间单向通信

  • 不使用IP通信:ip会变

1.使用--name 容器名设置容器名

docker run -d --name web tomcat
docker run -d --name database -it centos /bin/bash

2.ping测试

#查看容器虚拟ip
docker inspect database容器id
# 找到NetworkSettings/IpAddress
docker exec -it web容器id
# ping database容器.IpAddress,发现可以ping通
# ping database,不通
# 先删除原web容器
docker rm -f web容器id
# 重新创建Web容器,并设置link
docker run -d --name web --link database tomcat
# 重新执行2步骤,发现ping database可以ping通了

十、基于bridge容器间双向通信

1.概念

网桥bridge建立了docker与物理机之间的沟通桥梁

2.操作

# 查看网络明细,可以看到有一个默认的网桥bridge
docker network ls
# 创建一个bridge
docker network create -d bridge my-bridge
# 将两个容器连接到网桥
docker network connect my-bridge web
docker network connect my-bridge database
# 分别进入两个容器内部测试网络是否互通
## database ping web
docker exec -it database /bin/bash
ping web
PING web (172.18.0.2) 56(84) bytes of data.
64 bytes from web.my-bridge (172.18.0.2): icmp_seq=1 ttl=64 time=0.068 ms
64 bytes from web.my-bridge (172.18.0.2): icmp_seq=2 ttl=64 time=0.048 ms
64 bytes from web.my-bridge (172.18.0.2): icmp_seq=3 ttl=64 time=0.052 ms

## database ping web 
docker exec -it web /bin/bash
ping database
PING database (172.18.0.3) 56(84) bytes of data.
64 bytes from database.my-bridge (172.18.0.3): icmp_seq=1 ttl=64 time=0.115 ms
64 bytes from database.my-bridge (172.18.0.3): icmp_seq=2 ttl=64 time=0.061 ms
64 bytes from database.my-bridge (172.18.0.3): icmp_seq=3 ttl=64 time=0.057 ms

十一、容器间数据共享

1.场景

  • 同集群多容器数据更新
  • 利用数据卷:Volume

2.操作

  • -v选项挂载宿主机目录
docker run --name 容器名  -v 宿主机路径:容器内挂载路径 镜像名
# 实例:
docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
  • 通过--volumes-from 共享容器内挂载点(name定位)
# 创建共享容器
docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
# 共享容器挂载点
docker run --volumes-from webpage --name t1 -d tomcat
  • 实例
# 在宿主机创建/usr/webapps/volume-test/index.html
echo "<h1>volume-test1</h1>" > /usr/webapps/volume-test/index.html
# -v 创建挂载
docker run -d --name web1 -v /usr/webapps/:/usr/local/tomcat/webapps -p 8000:8080 tomcat
docker run -d --name web2 -v /usr/webapps/:/usr/local/tomcat/webapps -p 8001:8080 tomcat
# 查看网页显示是否成功 
# http://10.0.0.121:8000/volume-test/index.html
# http://10.0.0.121:8001/volume-test/index.html

# --volumes-from方式
docker create --name webpage -v /usr/webapps:/usr/local/tomcat/webapps tomcat /bin/true
docker run -d --name web3 --volumes-from webpage -p 8002:8080 tomcat
# 查看网页显示是否成功 
http://10.0.0.121:8002/volume-test/index.html

十二、docker-compose容器编排工具

1.多容器部署的麻烦

2.容器编排工具docker-compose

  • 单机多容器部署工具
  • 通过yml文件定义多容器如何部署
  • WIN/MAC默认提供Docker Compose,Linux需安装

3.安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 验证安装
chmod +x /usr/local/bin/docker-compose 
docker-compose -version

4.使用docker-compose安装开源博客系统wordpress

参考:https://docs.docker.com/compose/wordpress/

原文地址:https://www.cnblogs.com/wod-Y/p/13546324.html