docker,docker-compose常用命令及部署

一、docker

  1、常用命令

docker inspect redismaster  查看docker容器ip

docker exec -it dataseciruty-shuhan /bin/sh  容器启动前提下进入docker控制台

docker build -t datasecurity-web-1.0.0 . 构建docker镜像

docker rmi imageid 删除docker镜像

docker ps -a 查看所有容器

docker run -d --restart=always -p 8091:8091 --name xinyar_erp_web_test xinyar/erp-web 运行docker容器

docker logs -f dataseciruty-shuhan 查看容器运行日志

docker cp [container-id]:容器内部文件路径 需要存放的路径 将容器内部文件下载
docker cp ecef8319d2c8:/root/test.txt /root/
docker cp 文件存放的路径 [container-id]:容器内部文件路径 将容器内部文件上传
docker cp /root/test.txt ecef8319d2c8:/root/

  2、dockerfile

FROM williamyeh/java8:latest 设置项目运行所需基础镜像
EXPOSE 8081 设置端口
ENV LANG="C.UTF-8" 设置容器编码格式,防止日志打印中文乱码 ADD datasecurity-web-1.0.0.jar shuhan-web.jar 挂载运行jar包到容器位置 ENTRYPOINT ["java","-jar","shuhan-web.jar", "--spring.config.location=/shuhan-config/bootstrap.yml", "--spring.config.location=/shuhan-config/application.yml"]
jar包执行命令 后面的配置文件为项目执行的配置文件,需要在docker run 时将配置文件挂载到容器中,这样在修改配置文件后无需重新构建镜像,只需重启项目即可重新加载配置,这里使用nacos配置热加载,部分配置可以无需重启项目也可以更新配置

  3、docker构建运行脚本

DOCKER_CONTAINER_NAME="dataseciruty-shuhan" # 容器名称

# 镜像相关
DOCKER_IMAGE_NAME="dataseciruty-shuhan"
DOCKER_NEW_VERSION="1.0.0"
# 版本是否符合
DOCKER_IMAGE_IS_MATCH_TAR_FILE="false"

function destory_docker_service()
{
    # 停止容器
    for i in [ `docker ps ` ]; do
            if [[ "$i" == "$DOCKER_CONTAINER_NAME" ]]; then
                    echo "尝试停止$DOCKER_CONTAINER_NAME容器..."
                docker stop $DOCKER_CONTAINER_NAME
            fi
    done
    # 删除容器
    for i in [ `docker ps -a` ]; do
            if [[ "$i" == "$DOCKER_CONTAINER_NAME" ]]; then
                    echo "尝试删除$DOCKER_CONTAINER_NAME容器..."
            docker rm $DOCKER_CONTAINER_NAME
            fi
    done
}

function docker_build_image()
{
        # 清理容器(保留历史构建的镜僿
        destory_docker_service

        if [[ $? -eq 0 ]]; then
                echo "应用服务容器和镜像已处理,配置文件已完成复制!"
        else
                exit 1
        fi

        for i in [ `docker images --filter reference=$DOCKER_IMAGE_NAME` ]; do
                #statements
                if [[  "$i" == "$DOCKER_NEW_VERSION" ]]; then
                        echo "镜像版本重复"
                        exit 1
                fi
        done

        echo "Docker镜像构建......cmd:(docker build -t $DOCKER_IMAGE_NAME:$DOCKER_NEW_VERSION .)"
        docker build -t $DOCKER_IMAGE_NAME:$DOCKER_NEW_VERSION .

        # 判断是否有镜僿存在时创建相应的容器实例
        for i in [ `docker images --filter reference=$DOCKER_IMAGE_NAME` ]; do
                #statements
                echo "现有的版本信恿 $i"
                if [[  "$i" == "$DOCKER_NEW_VERSION" ]]; then
                        DOCKER_IMAGE_IS_MATCH_TAR_FILE="true"
                        echo "已经找到最新构建的镜像!"
                        run_docker_service_image
                        break
                fi
        done
        if [[ $DOCKER_IMAGE_IS_MATCH_TAR_FILE == "false" ]]; then
                echo "构建镜像未匹配到最新版本,已退出安裿"
                exit 1
        fi

        echo "构建后的docker images镜像列表:"
        docker images

        echo "当前正在运行的Docker容器实例列表:"
        docker ps
}

function run_docker_service_image()
{
        echo "正在启动docker 服务容器......"
        docker run -p 8082:8081 --name $DOCKER_CONTAINER_NAME --network mynet -d -v /root/shuhan-config/:/shuhan-config $DOCKER_IMAGE_NAME:$DOCKER_NEW_VERSION  ###-v 将配置文件挂载到容器中
        
        docker logs $DOCKER_CONTAINER_NAME
}

while getopts ":v:" opt
do
    case $opt in
        v)
        echo "镜像版本为:$OPTARG"
        DOCKER_NEW_VERSION=$OPTARG
                docker_build_image
        ;;
        ?)
        echo "缺少版本参数-v"
        exit 1;;
    esac
done

  4、docker访问远程仓库操作

vim /etc/docker/daemon.json  修改docker镜像代理地址

{
  

       "registry-mirrors": [
       "https://jx0gsb4z.mirror.aliyuncs.com"
    ],

    "insecure-registries": [
"127.0.0.1"
]
}
加入这个配置

docker login 127.0.0.1  登录docker镜像远程仓库
 
docker tag metabase:1.0.0 127.0.0.1/shuhan_project/metabase:1.0.0 标记仓库镜像
 
docker pull 127.0.0.1/shuhan_project/metabase:1.0.0 拉取镜像
 
docker commit -a "lzk" -m "assets analysis" 9b7519036f04 metabase:1.0.0 将容器状态打成镜像 # -a 作者 -m 说明 容器id 镜像名称:版本号
 
docker save 镜像名称 -o tar包放置的路径/my.tar  将镜像打成tar包
 
docker load -i metabase.tar 将外部tar包加载到本地docker镜像
 
docker push 127.0.0.1/lzk_project/metabase:1.0.0 将本地镜像推送到远程docker镜像仓库

  5、docker端口操作

查看dockers容器端口映射
sudo iptables -t nat -L DOCKER -n
添加dockers容器映射--13代表行数
sudo iptables -t nat -R DOCKER 13  -p tcp -d 0.0.0.0/0 --dport 13306 -j DNAT --to-destination 172.19.0.12:3306
删除dockers容器映射
sudo iptables -t nat -D DOCKER -p tcp -d 0/0 --dport 18999 -j DNAT --to-destination 72.118.1.31:8999
保存规则
service iptables save
重启防火墙
systemctl restart iptables.service
查看防火墙规则:iptables -L
systemctl restart iptables.service
service iptables restart
#查看容器id
docker inspect [container_name] | grep IPAddress
#添加转发
iptables -t nat -A DOCKER -p tcp --dport 8082 -j DNAT --to 72.118.1.34:6379
#172.17.0.3:80是容器ip+要暴露的端口
sudo iptables -A INPUT -p tcp --dport <port_number> -j ACCEPT
sudo iptables -L -n -v
# 删除规则
iptables -t nat -D DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.19.0.5:8080
iptables -t nat -D POSTROUTING -s 172.19.0.5/32 -d 172.19.0.5/32 -p tcp -m tcp --dport 8080 -j  MASQUERADE
iptables -t filter -D DOCKER -d 172.19.0.5/32 -p tcp -m tcp --dport 8080 -j ACCEPT
iptables -D INPUT -p tcp --dport 8080 -j ACCEPT

lsof -i:6379 //如果有显示说明已经开放了,如果没有显示说明没有开放
netstat -aptn |grep -i 6379 //查看是否监听在0.0.0.0:6379
netstat -lptn |grep -i 6379 //查看TCP类型的端口
netstat -lpun |grep -i 6379 //查看UDP类型的端口
telnet 127.0.0.1 6379 //telnet IP 端口号

 

二、docker-compose

  1、常用命令

docker-compose up -d nginx                     构建建启动nignx容器

docker-compose exec metabase-nginx bash            登录到nginx容器中

docker-compose down                              删除所有nginx容器,镜像

docker-compose ps                                   显示所有容器

docker-compose restart nginx                   重新启动nginx容器

docker-compose run --no-deps --rm php-fpm php -v  在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器

docker-compose build nginx                     构建镜像 。        

docker-compose build --no-cache nginx   不带缓存的构建。

docker-compose logs  nginx                     查看nginx的日志 

docker-compose logs -f nginx                   查看nginx的实时日志

 

docker-compose config  -q                        验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 

docker-compose events --json nginx       以json的形式输出nginx的docker日志

docker-compose pause nginx                 暂停nignx容器

docker-compose unpause nginx             恢复ningx容器

docker-compose rm nginx                       删除容器(删除前必须关闭容器)

docker-compose stop nginx                    停止nignx容器

docker-compose start nginx                    启动nignx容器

  2、docker-compose.yml

version: '3'
services:
  metabase-nginx:
    image: my-nginx:1.18-alpine  使用基础镜像
    container_name: metabase-nginx  容器名称
    networks:
      - mynet  将容器加入统一的network下是容器与容器之间通信
    ports:
      - "4001:4001"
    volumes:
    - /data/metabase-build/nginx.conf:/etc/nginx/nginx.conf:ro  nginx配置文件
  metabase-db:
    image: mysql:8.0
    container_name: metabase-db
    networks:
      - mynet
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci #设置utf8字符集
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456 #root管理员用户密码
    ports:
      - '33061:3306'  #host物理直接映射端口
  #报表分析平台
  metabase:
    build:   指定运行的dockerfile
      context: /data/metabase-build/bin/
      dockerfile: Dockerfile  
    image: metabase
    container_name: metabase
    restart: always
    ports:
      - "4000:4000"
    networks:
      - mynet
    volumes:
      - /data/metabase-build/bin/metabase.jar:/metabase.jar
    environment:  metabase配置
      TZ: Asia/shanghai
      MB_JETTY_PORT: 4000
      MB_DB_TYPE: mysql
      MB_DB_DBNAME: metabase
      MB_DB_PORT: 3306
      MB_DB_USER: root
      MB_DB_PASS: 123456
      MB_DB_HOST: 123.123.123.123
      MB_JETTY_HOST: 0.0.0.0
networks:
  mynet:
    external: true

 

    

    

posted @ 2020-11-23 11:01  稻火  阅读(483)  评论(0编辑  收藏  举报