docker.md 5.5 KB

安装

yum install -y docker

但是安装的不是新
systemctl start docker
systemctl enable docker

or

一键安装脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

Centos7以上,某些老旧版本不支持,建议7.6or7.8

配置国内加速

vim /etc/docker/daemon.json
添加镜像加速的配置文件
...
重新加载配置文件
systemctl daemon-reload
重启docker服务
systemctl restart docker.service

基本命令

container id 可以只写一部分,可以当作names 使用 docker inspect test01 docker network inspect docker volume inspcet

docker对于镜像操作

docker --help
docker run --help

docker images 查看本地docker镜像
docker rmi 删除镜像
docker run

    参数
    -d 后台运行
    --name  起名字
    -p 端口映射
        第一个为实体机的ip,第二个为虚拟机的ip
    -e 环境配置,每个镜像不同
        在hub.docker.com可以搜索
    镜像名字:版本
        没有指定版本时候,默认为latest,最新版本
    -v 数据卷名:容器内目录 挂载数据卷
        挂载到docker的默认路径
    或者
    -v 本地目录 : 容器内目录 
        挂载到自定义的目录
    --network heima 
        指定自定义的网络
    --link可以通过容器名互相通信,容器间共享环境变量。

对于容器中

docker pull
docker rm 删除容器

docoker start
docker stop

docekr ps 镜像运行状态
docker logs日志
    docker logs -f nginx
        follow 持续查看


docker exit
docker exec 
    docker exec  -it nginx bash
        it的意思是iteractive terminal 可交互的终端
        bash 是交互的方式

    docekr exec -it mysql bash
    docker exec -it mysql mysql -u root -p
    可以直接执行命令

例子

docker配置mysql

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=1234 \
  mysql


docker run -d \
    -p 3306:3306 \
    --name mysql-stable \
    --privileged=true \
    --restart=always \
    -e MYSQL_ROOT_PASSWORD=qweQWE123. \
    mysql

安装的是不支持外网访问的,需要自己配置

docker 配置nginx

docker hub中搜索nginx 修改代码 执行

EX:

docker run -d --name nginx_docs -v /root/nginx_docs:/usr/share/nginx/html -v /root/nginx_docs_conf/nginx:/etc/nginx/  -p 4000:80 nginx

数据卷

映射容器和本地机 在/var/lib/docker/volumes/html/_data 目录下 是固定的

docker volume ls 查看已经创建的卷 docker volume inspect 查看卷的详细信息 docker volume rm docker volume create test01

  1. 绝对路径 -v 本地目录 : 容器内目录 挂载到自定义的目录
  2. 别名 -v 数据卷名:容器内目录 挂载数据卷 挂载到docker的默认路径

DockerFile

镜像分层结构

FROM	    指定基础镜像	FROM centos:6
ENV	        设置环境变量,可在后面指令使用	ENV key value
COPY	    拷贝本地文件到镜像的指定目录	COPY ./jre11.tar.gz /tmp
RUN	        执行Linux的shell命令,一般是安装过程的命令	RUN tar -zxvf /tmp/jre11.tar.gz&& EXPORTS path=/tmp/jre11:$path
EXPOSE	    指定容器运行时监听的端口,是给镜像使用者看的	EXPOSE 8080
ENTRYPOINT	镜像中应用的启动命令,容器运行时调用	ENTRYPOINT java -jar xx.jar

一个nodejs的

FROM node:20.10.0
RUN mkdir -p /app
WORKDIR /app
COPY ./todo_web_vue .
EXPOSE 8080
RUN chmod -Rf 777 /app
CMD ["./start.sh"]

a.sh

node server.js &
npm run serve
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

将其中的一些集成了 更改了基础镜像

# 基础镜像
FROM openjdk:11.0-jre-buster
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

构建

docker build -t todo_web_vue . docker build -f ./Dockerfile -t todo_web_vue .

docker run --name testdockerfiile2 -p 90:8080 app2

从dockerfile构建
docker build 
    会生成镜像

保存到本地、从本地加载
docker save
docker load

上传到镜像仓库、从镜像仓库拉取
docker pull
docker push

当前目录中的dockerfile,镜像名称

自定义网络 实现不容容器内部之间互联

可以使用docker 的网桥,但是只能用ip,部署项目的时候不推荐,建议自定义网桥,不同项目之前不互通

在不同容器之间通信

docker network create test01
docker network create -d bridge test01 # 显式地指定了网络驱动为桥接模式
docker network connect test01
docker network ls
docker network inspect test01
docker network rm test01
docker network prune # 删除所有没有用到的

加入自定义网络额容器可以,通过容器名相互访问

运行多个容器在指定网络之中

  1. 启动容器时,明确指定容器使用哪个网路 --network heima 指定自定义的网络

  2. 启动后加入到某个网络 docker network connect test01

dockerCompose

用于一次部署多个容器