使用docker compose 構建多個鏡像


  • 定義docker compose
    version: '3'
    
    services: 
      composedb:
        image: mysql/mysql-server
        container_name: composedb
        command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
        restart: always
        ports:
         - "3306:3306"
        environment:
         MYSQL_ROOT_PASSWORD: pwd123456
         MYSQL_USER: test
         MYSQL_PASSWORD: pwd123456
        volumes:
         - /docker/network/beta/mysql-init:/docker-entrypoint-initdb.d  
      web:
        build: .
        container_name: aspnetcore
        ports:
         - "8004:80"
        #entrypoint: "sh ./wait-for-it.sh composedb:3306 -- sh  ./aspnetcore.sh"
        #command: ["./wait-for-it.sh", "composedb:3306", "--", "./aspnetcore.sh"]
        depends_on:
         - composedb

     

  • 修改初始化實力代碼當數據庫鏡像初始化完畢后執行數據初始化
     public static async Task SeedAsync(IApplicationBuilder ApplicationBuilder, ILoggerFactory LoggerFactory, int? retry = 0)
            {
                var retryForAvaibility = retry.Value;
                using (var scope = ApplicationBuilder.ApplicationServices.CreateScope())//數據庫未初始化失敗會catch
                {
                    try
                    {
                        var context = (UserContext)scope.ServiceProvider.GetService(typeof(UserContext));
                        var logger = (ILogger<UserContextSeed>)scope.ServiceProvider.GetService(typeof(ILogger<UserContextSeed>));
                        logger.LogDebug("Begin UserContextSeed SeedAsyc");
                        context.Database.Migrate();
                        if (!context.Users.Any())
                        {
                            context.Add(new Model.UserInfo { Name = "cyao", Company = "nocompany", Title = "軟件工程師" });
                            context.SaveChanges();
                        }
                    }
                    catch (System.Exception ex)
                    {
                        retryForAvaibility++;
                        if (retryForAvaibility > 10)
                        {
                            var logger = LoggerFactory.CreateLogger(typeof(UserContextSeed));
                            logger.LogError(ex.Message);
                            await SeedAsync(ApplicationBuilder, LoggerFactory, retryForAvaibility);
                        }
                    }
                }
            }
  • 其他的一些問題
    1.高版本的MySQL 加密方法使用caching_sha2_password
    2.低版本的Mysql創建的用戶會有權限問題
    使用root用戶進入到bash
    然后執行:
    GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION;
  • liunx 跑到對應的docker-compose 文件路徑后執行build 然后將docker-compose up起來
  • docker-compose build 構建dockers-compose鏡像
  • docker-compose up
  • docker-compose down


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM