docker安装与部署

纪勇军
2023-12-01

1. 安装docker

  1. 安装:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  2. 添加镜像:在/etc/docker/daemon.json中添加{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}并重启服务
    1. sudo systemctl daemon-reload
    2. sudo systemctl restart docker

2. 命令

  1. 启动与停止:

    1. 启动:systemctl start docker
    2. 停止:systemctl stop docker
    3. 重启:systemctl restart docker
    4. 查看状态:systemctl status docker
    5. 设置开机启动dockersystemctl enable docker
  2. 镜像命令:

    1. 查看镜像:docker images
    2. 搜索镜像:docker search 镜像名称
    3. 拉取镜像:docker pull 镜像名称
    4. 删除镜像:docker rmi 镜像id
    5. 删除所有镜像:docker rmi `docker images -q`
  3. 容器命令:

    1. 查看正在运行的容器:docker ps
    2. 查看所有容器:docker ps -a
    3. 参数说明:
      1. -i表示运行容器
      2. -t表示容器启动后会进入命令行
      3. --name表示为创建的容器命名
      4. -v表示目录映射关系
      5. -p表示端口映射
    4. 创建并启动一个容器(交互式方式):
      1. 先拉取一个centos7的镜像:docker pull centos:7
      2. 创建并启动:docker run -it --name=mycentos centos:7
    5. 创建守护式容器:
      1. 启动守护式容器:docker run -di --name=mycentos2 centos:7
      2. 登录进去:docker exec -it mycentos2 /bin/bash
      3. 这个/bin/bash的作用是保证exit时容器不会停止,因为docker后台必须运行一个进程
      4. 可不可以docker exec -it?:可以,但是exit就退不出来了,得ctrl + c
    6. 停止或启动已经运行过的容器:docker stop/start mycentos/ID
    7. 文件拷贝:docker cp a.txt mycentos:/usr/local/
    8. 两个文件的位置反过来就是从容器拷贝到宿主机
    9. 目录挂载:
      1. 概念:可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器
      2. 在创建容器时添加-v参数:docker run -di -v /usr/local/test:/usr/local/test --name=mycentos centos:7就是将宿主的test目录和容器的test做映射
      3. 权限不足?:--privileged=true
    10. 查看容器ipdocker inspect mycentos
    11. 删除容器:docker rm mycentos

3. 部署应用

3.1 Mysql部署

  1. 拉取镜像:docker pull centos/mysql-57-centos7
  2. 创建容器:docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql-p表示端口映射,宿主的3306对应容器的3306, -e表示添加环境变量,设置远程登陆密码,容器登陆密码为空)
  3. 操作容器:docker exec -it mysql5.7 /bin/bash
  4. 登陆容器中的mysqlmysql -uroot -p

当然第二步可以不这样设置远程密码,用正常的方式:

  1. create user 'root'@'%' identified with mysql_native_password by '123456';
  2. grant all privileges on *.* to 'root'@'%' with grant option;
  3. flush privileges;

3.2 Tomcat部署

  1. 拉取镜像:docker pull tomcat
  2. 创建容器:docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat
  3. 接下来往宿主机的/usr/local/tomcat/webapps下放war包即可

3.3 Nginx部署

  1. 拉取镜像:docker pull nginx
  2. 创建容器:docker run -di --name=nginx -p 80:80 nginx

3.4 Redis部署

  1. 拉取镜像:docker pull redis
  2. 创建容器:docker run -di --name=redis -p 6379:6379 redis

3.5 RabbitMQ部署

  1. 拉取镜像:docker pull rabbitmq
  2. 创建容器:docker run -d --hostname my-rabbit --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq
  3. 进入容器:docker exec -it rabbitmq /bin/bash
  4. web插件打开:rabbitmq-plugins enable rabbitmq_management
  5. 然后就可以访问了
  6. 其余的看

4. Docker Compose

4.1 什么是compose

Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。使用compose,你能通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有的服务

4.2 组成

Docker-Compose将管理的容器分为三层:

  1. 工程(Docker-Compose运行目录下的所有文件,无特殊指定工程名为当前目录名)
  2. 服务(定义了容器运行的镜像,参数,依赖等)
  3. 容器

4.3 安装与卸载

  1. 下载二进制包:sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. 给权限:sudo chmod +x /usr/local/bin/docker-compose
  3. 创建软链:sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  4. 查看版本:docker-compose --version

卸载只需要删除文件即可:rm /usr/local/bin/docker-compose

4.4 Compose模板

模板文件是使用Compose的核心,涉及的指令关键字也比较多,大部分指令与docker run 相关参数的含义都是类似的。默认的模板文件名称为docker-compose.yml,格式为YAML格式。

模板主要分为三部分:

  1. services服务:在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等。
  2. volumes:数据卷,挂载使用
  3. networks:应用的网络

例如同时启动tomcatmysql以及redis容器:

mkdir -p /usr/local/mycompose
cd /usr/local/mycompose
vim docker-compose.yml
version: '3'
services:
  redis1:
    image: redis
    ports:
      - "6379:6379"
    container_name: "redis1"
    networks:
      - dev
  mysql1:
    image: centos/mysql-57-centos7
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    prots:
      - "3306:3306"
    container_name: "mysql1"
    networks:
      - dev
  web1:
    image: tomcat
    ports:
      - "9090:8080"
    container_name: "web1"
    networks:
      - dev
      - pro
networks:
  dev:
    driver: bridge
  pro:
  	driver: bridge

启动:

cd /usr/local/mycompose
# 启动
docker-compose up
# 如果后台启动
docker-compose up -d

# 停止
docker-compose stop

这里不列举docker compose的命令和compose文件的命令

5. Dockerfile文件

怎么样自己开发一个镜像呢?

Dockerfile

Dockerfifile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfifile文件并根据Dockerfifile文件的描述来构建镜像。

Dockerfile分为四部分:

  1. 基础镜像信息
  2. 维护者信息
  3. 镜像操作命令
  4. 容器启动时执行命令

常用命令:

命令作用
FORM image_name:tag定义了根据哪个基础镜像启动构建流程
MAINTAINER user_name声明镜像创建者
ENV key value设置环境变量
RUN command核心部分,命令
ADD source_dir/file dest_dir/file将宿主的文件内容复制到容器内,如果是压缩文件会自动解压
COPY source_dir/file dest_dir/file将宿主的文件内容复制到容器内
WORKDIR path_dir工作目录

具体操作:

vim Dockerfile

# 根据centos构建
FORM centos:7
# 创建者
MAINTAINER jerry
# 工作目录
WORKDIR /usr

# 执行命令,在centos容器中创建文件夹并复制宿主的jdk
RUN mkdir /usr/local/java
# ADD可以自动解压
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/
# 环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

docker build -t="jdk1.8" .

# 到此构建完毕

# 创建并启动容器
docker run -it --name=testjdk jdk1.8 /bin/bash
# 进入容器查看java
java -version

6. 迁移和备份

  1. 将容器保存为镜像:docker commit mycentos mycentos
  2. 镜像备份:docker save -o mycentos.tar mycentos
  3. 恢复镜像:docker load -i mycentos.tar
  4. 创建并启动:docker run - di --name=mycentos -o 80:80 mycentos

7. Docker私有仓库

7.1 搭建私有仓库

# 1. 拉取私有仓库镜像
docker pull registry

# 2. 启动容器
docker run -di --name=registry -p 5000:5000 registry

# 访问 ip:5000/v2/_catalog

# 3. 使docker信任私有仓库地址
# 之前添加过镜像加速的文件
vim /etc/docker/daemon.json
{"insecure-registries":["ip:5000"]}

# 4. 重启docker
systemctl restart docker

# 5. 启动容器
docker start registry

7.2 上传

# 标记镜像为私有仓库的
docker tag mycentos ip:5000/mycentos
# 重启(可以不用)
docker restart registry
# 上传
docker push ip:5000/mycentos

7.3 拉取

docker pull ip:5000/mycentos

docker info可以查看信息

拉取其他服务器:

vim /usr/lib/systemd/system/docker.service
--add-registry=ip:5000 --insecure-registry=ip:5000 \

# 重启
systemctl daemon-reload
systemctl restart docker
 类似资料: