본문 바로가기
협업툴,가상환경 정리/docker_정리

docker-compose 예제 정리

by 알 수 없는 사용자 2022. 9. 30.

 

 


설명은 따로 안쓰고 예제만 일단 정리.


환경 :

docker-compose 3버전

ubuntu 20.04

foxy ROS2

python 3.8

ros_entrypoint.sh &&                       : 각종 apt install 이나 repository 파일 또는 apt-key add , pip install , apt update 용
run_colcon.sh &&                            : ros2 관련 환경설정 업데이트
start_server.sh &&                           : 실제 돌릴 프로그램 실행
sleep_to_delay_closing_time.sh     : 프로그램 종료시 delay 용

 

구조 :

프로젝트 경로 docker_files 각종 도커 파일 및 bash 파일 정리 + .env 파일
  liam_repository    fake_node 및 test 파일 
  resource   ros2 custom msg 또는 lib 파일들
  script 소스코드
  README.md 리드미

 

빌드방법 :

cd 프로젝트경로/docker_files/docker-compose.yaml

docker-compose -f docker-compose.yaml up

 

예제 :

.env 파일

test_NETWORK_ABC_CLASS=172.29.0
BASH_FILES_DIRECTORY=/app/docker_files
LOGIN_ID=test_id
LOGIN_PW=test_passwd

 

docker-compose.yml 파일

version: '3.6'

networks:
  test_network:
    driver: bridge
    external: false
    #test_NETWORK_ABC_CLASS=172.29.0
    ipam:
      driver: default
      config:
        - subnet: "${test_NETWORK_ABC_CLASS}.0/21"
          gateway: "${test_NETWORK_ABC_CLASS}.1"


services:
  emqx_440:
    image: emqx/emqx:4.4.0
    container_name: emqx_440
    hostname: emqx_440      #${NODE_ID}
    working_dir: /opt/emqx
    environment:
      - EMQX_LOADED_PLUGINS=emqx_management, emqx_recon, emqx_retainer, emqx_dashboard, emqx_auth_mnesia
      - EMQX_AUTH__USER__1__USERNAME=${LOGIN_ID}
      - EMQX_AUTH__USER__1__PASSWORD=${LOGIN_PW}
      - EMQX_DASHBOARD__DEFAULT_USER__LOGIN=${LOGIN_ID}
      - EMQX_DASHBOARD__DEFAULT_USER__PASSWORD=${LOGIN_PW}
      - EMQX_MQTT__MAX_PACKET_SIZE=1MB
      - EMQX_ALLOW_ANONYMOUS=false
      - EMQX_AUTH__USER__PASSWORD_HASH=plain
      #- EMQX_LOG__LEVEL=info  warning  debug
      - EMQX_LOG__LEVEL=info
      - EMQX_LISTENER__TCP__EXTERNAL__ACTIVE_N=100
      #- EMQX_NAME=emqx
      #- EMQX_HOST=${NODE_IP}
      #- EMQX_CLUSTER__DISCOVERY=static
      #- EMQX_CLUSTER__STATIC__SEEDS=${EMQX_CLUSTER_STATIC_SEEDS}
      - EMQX_LISTENER__TCP__EXTERNAL=1883
    ports:
      - "1883:1883"     #HOST:CONTAINER
      - "18083:18083"
#      - "8083:8083"
#      - "8084:8084"
#      - "8883:8883"
    sysctls:
      - net.core.somaxconn=32768
      - net.ipv4.tcp_max_syn_backlog=16384
      - net.ipv4.tcp_rmem=1024 4096 16777216
      - net.ipv4.tcp_wmem=1024 4096 16777216
      - net.ipv4.tcp_max_tw_buckets=104857
      - net.ipv4.tcp_fin_timeout=15
    networks:
      test_network:
        ipv4_address: "${test_NETWORK_ABC_CLASS}.2"
    volumes:
      - /etc/localtime:/etc/localtime
    #restart: always
    logging:
      driver: "json-file"
      options:
        max-file: "1"
        max-size: "100m"


  edge_server:
    image: osrf/ros:foxy-desktop
    #image: ubuntu:focal
    container_name: edge_server
    hostname: edge_server
    working_dir: /app
    environment:
      - LANG=C.UTF-8
      - LC_ALL=C.UTF-8
      - ROS_DISTRO=foxy
      - BASH_FILES_DIRECTORY=docker_files
    depends_on:
      - emqx_440
#    links:
#      - emqx_440
#    ports:
#      - "1883:1883"
    networks:
      test_network:
        ipv4_address: "${test_NETWORK_ABC_CLASS}.5"
    volumes:
      - ../:/app
      - /etc/localtime:/etc/localtime
    #restart: always
    # BASH_FILES_DIRECTORY=/app/docker_files
    entrypoint: >
      bash -c '
      chmod 777 $BASH_FILES_DIRECTORY/* &&
      source $BASH_FILES_DIRECTORY/ros_entrypoint.sh &&
      source $BASH_FILES_DIRECTORY/run_colcon.sh &&
      source $BASH_FILES_DIRECTORY/start_server.sh &&
      source $BASH_FILES_DIRECTORY/sleep_to_delay_closing_time.sh
      '

  tm_fake_node:
    image: osrf/ros:foxy-desktop
    #image: ubuntu:focal
    container_name: tm_fake_node
    hostname: tm_fake_node
    working_dir: /app
    environment:
      - LANG=C.UTF-8
      - LC_ALL=C.UTF-8
      - ROS_DISTRO=foxy
      - BASH_FILES_DIRECTORY=docker_files
    depends_on:
      - edge_server
    networks:
      test_network:
        ipv4_address: "${test_NETWORK_ABC_CLASS}.6"
    volumes:
      - ../liam_repository/fake_ros2_mqtt/ros2:/app
    entrypoint: >
      bash -c '
      source /app/entrypoint_tm.sh
      '

# docker stop emqx_440 && docker rm emqx_440 && docker image rm emqx/emqx:4.4.0
# docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q) && docker image rm $(docker images -q) && docker volume prune -y

#docker-compose -f docker-compose.yaml up
#docker exec -it emqx_440 /bin/bash
#/opt/emqx/bin/emqx_ctl user add test_id passwd_test

 

 

 


gitlab local server 돌리는 방법

컴포즈 up 시키고 시간 좀 걸린 다음에

http://liam.gitlab_ci_test.com/ 로 자기자신(HOST) 깃랩 서버에 접속 할 수 있다.

초기 id passwd 는 지정 되어잇음.

ID   : root

PW : FUJbkD3g6V+yXA8QxsyAOPk/eT+JZTji9A+P7Xuf8Rs=   <- 이런 키로 되어있음 확인하는 방법은

'${GITLAB_HOME}/gitlab/config:/etc/gitlab' <- 여기서 확인 가능하다. 

${GITLAB_HOME}/gitlab/config/ 경로로 가서 "sudo cat initial_root_password" 로 확인하든가

exec 로 도커 접속해서 /etc/gitlab 경로에서 "sudo cat initial_root_password" 로 확인하면 됨.

 

services:
  gitlab:
    image: 'gitlab/gitlab-ee:14.6.2-ee.0'
#    image: 'gitlab/gitlab-ee:latest'
    container_name: gitlab
    restart: always
    hostname: 'gitlab.example.com'
    environment: # lfs == Large File Storage // ssh 포트 바꾸려면 rails 키값 변경하면 된다.
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://liam.gitlab_ci_test.com/'
        gitlab_rails['gitlab_shell_ssh_port'] = 22
        gitlab_rails['lfs_enabled'] = true
        gitlab_rails['initial_root_password'] = $LOGIN_PW
        # Add any other gitlab.rb configuration here, each on its own line
      TZ: 'Asia/Seoul'
    shm_size: 256m
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    networks:
      custom_network:
        ipv4_address: "${custom_NETWORK_ABC_CLASS}.20"
    volumes:
      - '${GITLAB_HOME}/gitlab/config:/etc/gitlab'
      - '${GITLAB_HOME}/gitlab/logs:/var/log/gitlab'
      - '${GITLAB_HOME}/gitlab/data:/var/opt/gitlab'

설명을 좀 하자면 80번과 443은 접속 포트

22 는 ssh 용 포트로 22로 고정이다.

8080:80

4443:43

2022:22

이런식으로 접속 포트는 바꿀 수 있다.

 


docker-compose 에서 entrypoint 내에서만 코드 짤 때 팁

1. 일반 bash 에서 $로 쓰는거 전부 $$ 로 써줘야하고

2. bash -c 하고 ' ~~~~ ' 안에서 string을 쓰려면 " " 로 감싸줘야한다.

3. bash -c 하고는 한번의 명령어만 실행 되므로 && 나 || 를 써서 적절히 한 명령어로 묶어 줘야 한다.

4, if 문도 문법이 더 빡썜 if [ ]; then 이런식으로만 진행 가능.

services:
  gitlab-runner:
    container_name: gitlab-runner
    image: 'gitlab/gitlab-runner:latest'    # based on Ubuntu
    restart: on-failure
    volumes:
      - '${GITLAB_HOME}:/etc/gitlab-runner'
      - '/var/run/docker.sock:/var/run/docker.sock'
    entrypoint: > 
      /bin/bash -c '
      config_check=$$(find /etc/gitlab-runner -name "config.toml") &&
      echo $$config_check &&
      if [[ -z $$config_check ]]; then
        echo "111111111111111111111111111111111111111" &&
        ls &&
        touch /etc/gitlab-runner/config.toml 
      else
        echo "already exist config.toml" 
      fi;
      '

 

 

 

댓글