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 --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 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 hub中搜索nginx 修改代码 执行
EX:
docker run --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
镜像分层结构
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 # 删除所有没有用到的
加入自定义网络额容器可以,通过容器名相互访问
运行多个容器在指定网络之中
启动容器时,明确指定容器使用哪个网路 --network heima 指定自定义的网络
启动后加入到某个网络 docker network connect test01
用于一次部署多个容器