10 Docker
lix_uan 24 0

安装Docker

  • 卸载

    yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-selinux \
                      docker-engine-selinux \
                      docker-engine \
                      docker-ce
  • 安装docker

    # 虚拟机联网,安装yum工具
    yum install -y yum-utils \
               device-mapper-persistent-data \
               lvm2 --skip-broken
    
    # 设置docker镜像源
    yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
    
    yum makecache fast
    
    yum install -y docker-ce
  • 启动docker

    # 关闭
    systemctl stop firewalld
    # 禁止开机启动防火墙
    systemctl disable firewalld
    
    # 启动docker服务
    systemctl start docker  
    # 停止docker服务
    systemctl stop docker  
    # 重启docker服务
    systemctl restart docker  
    
    # 查看docker版本
    docker -v
  • 配置Dokcer镜像加速

    mkdir -p /etc/docker
    
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://0qcqt068.mirror.aliyuncs.com"]
    }
    EOF
    
    systemctl daemon-reload
    systemctl restart docker

安装DockerCompose

curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

# 修改权限
chmod +x /usr/local/bin/docker-compose

# Base自动补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

# 如果这里出现错误,需要修改自己的hosts文件
echo "185.199.108.133 raw.githubusercontent.com" >> /etc/hosts

基本 操作

镜像操作

# 构建镜像
docker build

# 推送镜像到服务
docker push

# 从服务拉取镜像
docker pull

# 保存镜像为一个压缩包
docker save

# 加载压缩包为镜像
docker load

案例1 保存、导入Nginx镜像

docker pull nginx

docker images 

docker save --help

# docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:latest

docker rmi nginx:latest

docker load -i nginx.tar

容器操作

docker run

docker pause

docker unpause

docker stop

docker start

# 删除一个容器
docker rm

# 查看容器状态
docker ps -a

案例2 创建并运行一个程序

# -d:后台运行容器
# -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
# nginx:镜像名称,例如nginx
docker run --name containerName -p 80:80 -d nginx

案例3 进入容器,修改文件

# docker exec :进入容器内部,执行一个命令
# -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
# mn :要进入的容器的名称
# bash:进入容器后执行的命令,bash是一个linux终端交互命令
docker exec -it mn bash

# 进入nginx的HTML所在目录 
cd /usr/share/nginx/html

# 容器内没有vi命令,无法直接修改
sed -i -e 's#helloworld#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html

# 在浏览器访问自己的虚拟机地址

数据卷(容器数据管理)

# 创建一个volume
docker volume create 

# 显示一个或多个volume的信息
docker volume inspect 

# 列出所有的volume
docker volume ls

# 删除未使用的volume
docker volume prune 

# 删除一个或多个指定的volume
docker volume rm

# 在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录
# 把html数据卷挂载到容器内的/root/html这个目录中
docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

# 容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上
# -v [宿主机目录]:[容器内目录]
# -v [宿主机文件]:[容器内文件]

案例4 给nginx挂载数据卷

# 创建容器并挂载数据卷到容器内的HTML目录
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html

Dockerfile自定义镜像

基于Ubuntu构建Java项目

# 新建一个空文件夹docker-demo
# 拷贝docker-demo.jar文件到docker-demo这个目录
# 拷贝jdk8.tar.gz文件到docker-demo这个目录
# 拷贝Dockerfile到docker-demo这个目录
# 其中的内容如下
# 指定基础镜像
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

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
# 将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下
# 运行命令
docker build -t javaweb:1.0 .

# 访问
http://192.168.50.132:8090/hello/count

基于java:8-alpine镜像,将一个Java项目构建为镜像

# 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile
# 拷贝docker-demo.jar到这个目录中
# 编写Dockerfile文件
FROM java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar

# 使用docker build命令构建镜像
docker build -t demo:1.0 .
# 使用docker run创建容器并运行
docker run --name demo -p 8090:8090 -d demo:1.0
# 访问
http://192.168.50.132:8090/hello/count

Docker-Compose

docker-compose.yml

docker-compose up -d

docker-compose logs -f
version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

使用DockerCompose部署带有图象界面的DockerRegistry

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=李煊的私有仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry
# 配置Docker信任地址
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.50.132:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

推送、拉取镜像

# 重新tag本地镜像,名称前缀为私有仓库的地址:http://192.168.50.132:8080/
docker tag nginx:latest 192.168.50.132:8080/nginx:1.0

# 推送镜像
docker push 192.168.50.132:8080/nginx:1.0 

# 拉取镜像
docker pull 192.168.50.132:8080/nginx:1.0 
评论区

索引目录