설명은 따로 안쓰고 예제만 일단 정리.
환경 :
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;
'
'협업툴,가상환경 정리 > docker_정리' 카테고리의 다른 글
도커 컴포즈 깃랩ci docker-compose with .git-lab_ci.yml (0) | 2022.11.21 |
---|---|
docker container to container ssh 접속 (1) | 2022.10.05 |
docker compose 설명 (1) | 2022.09.23 |
도커 볼륨 vs 바인드 마운트 (0) | 2022.09.21 |
7_docker 명령어 정리 (전체적으로) (0) | 2022.07.08 |
댓글