사용자:하늘/메모장/docker: 두 판 사이의 차이

잔글 (Cerulean님이 사용자:Cerulean/메모장/신문 문서를 넘겨주기를 만들지 않고 사용자:Cerulean/메모장/프로그래밍 문서로 이동했습니다)
 
(사용자 2명의 중간 판 22개는 보이지 않습니다)
1번째 줄: 1번째 줄:
<syntaxhighlight lang="c">
==설치==
#include <stdio.h>
https://docs.docker.com/engine/install/
#include <string.h>
 
패키지 관리자를 통한 설치는 최신 버전 설치가 안됨
===우분투===
<syntaxhighlight lang="shell">
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
 
# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
 
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
</syntaxhighlight>
 
===권한 없음===
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
 
docker를 sudo 권한으로 사용하여야 함. 그냥 sudo 붙여도 되는데 [[vscode]] 등에서 사용하기 불편해짐.
 
[[파일:Vscode docker permission.png|350px]]<syntaxhighlight lang="shell">
#sudo usermod -aG docker [사용자이름]
sudo usermod -aG docker $USER
 
# 그룹 갱신
newgrp docker
 
# 이후 docker 서비스 재시작
# service
sudo service docker restart
# systemctl
sudo systemctl restart docker
 
# 안되면 재부팅 ㄱㄱ


void delchars (char *str, char ch)
{
    int len = strlen(str);
    int i = 0;
    while ( i < len )   
    {
        if (str[i] == ch)
        {
          int j = i, width = 0;
            if ( str[i+1] == ch)
                width = 2;
            else
                width = 1;
            while (j < len)
                str[j] = str[j+width], j++;
        }
        i++;
    }
}
int main ( )
{
    char s1[128];
    strcpy(s1, "HelloWorld");
    delchars(s1, 'l');
    printf("[%s]\n", s1); // [HeoWord]
    delchars(s1, 'W');
    printf("[%s]\n", s1); // [Heoord]
}
</syntaxhighlight>
</syntaxhighlight>


<syntaxhighlight lang="c">
== 예제 ==
#include <stdio.h>
각 컨테이너는 ip 말고 이름으로 연결
#include <string.h>
 
int findStr (char *str, char *target)
docker-compose.yml
{
<syntaxhighlight lang="yaml">
     int i = 0;
version: "3.7"
     int j = 0;
 
     for ( ; (*target) != '\0' ; i++)
services:
     {
  caddy:
        int count = 0;
    image: caddy
        for ( ; (*str) != '\0'; j++)
    container_name: wiki-caddy
        {
    restart: unless-stopped
            if ( *str == *target)
    ports:
                count++;     
      - 80:80
            str++;
      - 443:443
        }
      - 443:443/udp
        str = str - j;
    volumes:
        printf("'%c' %d개", *target, count);
      - ./config/caddy/Caddyfile:/etc/caddy/Caddyfile
        target++;
      - ./data/caddy:/data/caddy
     }
# 선택사항
     printf("\n");
      - ./data/caddy/config/:/config/caddy
}
      - ./log/caddy/caddy.log:/var/log/caddy/caddy.log
int main () {
      - ./site:/srv
    char s[128];
     
    strcpy (s, "Hello,World");
    depends_on:
    findStr(s, "Ho");
      - php-fpm # <- 각 컨테이너는 ip 말고 이름으로 연결
    findStr(s, "ld");
      - db # <- 각 컨테이너는 ip 말고 이름으로 연결
     findStr(s, "lod");
 
}
    extra_hosts:
      - host.docker.internal:host-gateway
      #- host.docker.internal:127.0.0.1
 
  php-fpm:
     build:
      dockerfile: dockerfile-php-fpm
     container_name: wiki-php-fpm
     restart: unless-stopped
     volumes:
      - ./site:/srv
      - ./log/php-fpm/error.log:/usr/local/var/log/error.log
      - ./log/php-fpm/access.log:/usr/local/var/log/access.log
      - ./config/php-fpm/php-fpm.conf:/usr/local/etc/php-fpm.conf
      - ./config/php-fpm/www.conf:/usr/local/etc/php-fpm.d/www.conf
      - ./config/php-fpm/php.ini:/usr/local/etc/php/php.ini
#    포트 정의는 컴퓨터 외부로 포트 공개가 필요할 경우만 사용. 방화벽 규칙을 무시하도록 되어있음. 컨테이너끼리만 통신하면 없어도 됨.
#    ports:
#      - 9000:9000
 
  db:
     image: mariadb
     container_name: wiki-mariadb
    environment:
      - "MARIADB_ROOT_PASSWORD=**********"
      - "MARIADB_DATABASE=********"
      - "MARIADB_USER=*********"
      - "MARIADB_PASSWORD=**********"
     volumes:
      - ./config/mariadb/:/etc/mysql
      - ./data/mariadb/:/var/lib/mysql
      - ./db.sql/:/tmp/db.sql
#    ports:
#      - "3306:3306"
</syntaxhighlight>
</syntaxhighlight>


'H' 1개'o' 2개
dockerfile-php-fpm
'l' 3개'd' 1개
<syntaxhighlight lang="dockerfile">
'l' 3개'o' 2개'd' 1개
ARG PHP_VER=8.0.30
 
# php 이미지 설정
FROM php:${PHP_VER}-fpm-alpine
 
# 작업 경로
WORKDIR /srv
 
# 패키지 업데이트
RUN apk update; apk upgrade
 
# php 익스텐션 설치
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions
RUN install-php-extensions xml intl imagick
RUN install-php-extensions mysqli pdo_mysql apcu opcache
 
# 패키지 설치
RUN apk add diffutils vim bash lua5.1


브레인 퍽 : 이름 그대로 보는 사람의 뇌를 '''과부하로 조지려고''' 만든 변태 프로그래밍 언어. <del>ㅋㅋㅋ</del>
# edge 패키지 추가
RUN echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories
RUN apk add rsvg-convert


브레인 퍽의 포인터를 2개로 늘려놓은 더블퍽이라는 것도 있다. <del>구글에 Doublefuck치고 이미지 보기하면 안된다.</del>
# 디렉토리 액세스를 위한 권한 설정
# 도커의 기능 사용하면 아래 필요없음.
RUN apk add -U shadow
ARG UNAME=www-data
ARG UGROUP=www-data
ARG UID=1000
ARG GID=1001
RUN usermod  --uid ${UID} ${UNAME}
RUN groupmod --gid ${GID} ${UGROUP}


https://github.com/perillamint/GNE
# composer 설치
RUN curl -sSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer


GNE(그네)는 대한민국 최초의 샤머니즘 대통령 박ㄹ혜의 어록들을 종합하여 만든 프로그래밍 언어입니다. 한국 청년 프로그래머들은 현대 프로그래밍 언어의 잘못된 역사로 인해 혼이 비정상으로 자라고 자부심을 잃을 수 밖에 없습니다. 이러한 언어들의 왜곡·미화는 GNE부터 좌시하지 않겠습니다. 컴파일이 투명하게 처리되어 진상규명이 제대로 되는 프로그래밍 언어로, 선조의 의지를 담아 한민족의 자긍심을 고취하도록 GNE를 만들었습니다.
# php.ini 설정
#RUN mv /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini


해내겠습니다. 준비된 한국형 프로그래밍 언어, GNE입니다.
RUN rm -rf /var/cache/apk /etc/apk/cache
</syntaxhighlight>


혀엉... 언어
<syntaxhighlight lang="Caddyfile">
{
auto_https disable_redirects


혀어어어어어어어엉........ 핫. 혀엉..... 흑... 하앗... 흐윽... 형.  하앙.
log {
혀엉.... 하앙... 흐윽... 항. 항. 형... 하앙. 흐으윽... 형... 흡... 혀엉..
output file /var/log/caddy/caddy.log {
하아아앗. 혀엉.. 흡... 흐읍... 형.. 하앗. 하아앙... 형... 하앙... 흐윽...
roll_size 10MiB
혀어어엉.. 하앙. 항. 형... 하앙. 혀엉.... 하앙. 흑... 항. 형... 흡  하앗.
}
혀엉..... 흑. 흣
format json {
time_format iso8601
}
level DEBUG
}
}


엄랭<del>(Umjunsik-lang)</del>
https://www.example.com, :80 {
root * /srv


어떻게
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-XSS-Protection "1; mode=block"
X-Frame-Options SAMEORIGIN
X-Content-Type-Options nosniff


엄..
Cache-Control public, max-age=3600, s-maxage=3600
어엄.
}
어어엄........
어어어엄.........


식어!
    # 각 컨테이너는 ip 말고 이름으로 연결 (
식........ ....ㅋ
php_fastcgi php-fpm :9000 {
식........... ........ㅋ
split .php
식........ ....
index index.php
식어어!
}
식........ ....ㅋ
식.............................................................ㅋ
식........ ....ㅋ
식어 어어!
식ㅋ
어어어엄어어어어,
어엄어어.
동탄어어어어?준.......................
준........


엄어.
reverse_proxy /********/* host.docker.internal:9090 {
어어엄어어어,
transport http {
어어어엄.........
tls_insecure_skip_verify
어엄.
}
동탄어어어?화이팅!.
}
식ㅋ
reverse_proxy /********/* host.docker.internal:9443 {
준........
transport http {
tls_insecure_skip_verify
}
}
 
redir / /w/ permanent
rewrite /wiki/* /w/index.php?{query}
 
respond /w/cache/* 404
respond /status/* 404
respond /status 404
 
file_server /w/skins/*
file_server /w/images/*
file_server /w/resources/*
 
encode zstd gzip
}
</syntaxhighlight>


이 사람이름이냐!
인터프리터가 1을 반환했습니다. 오류
아래 추가


계획
$wgScribuntoDefaultEngine = 'luastandalone';


C언어 문자열 입출력 함수들 구현
기본 바이너리는 속도가 느림 php-luasandbox 확장기능 설치 후 아래 적용


한글로 코드 짜보기
$wgScribuntoDefaultEngine = 'luasandbox';


C언어는 잘 안쓸텐데
https://velog.io/@hamdoe/%EC%84%9C%EB%A1%9C-%EB%8B%A4%EB%A5%B8-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%97%90-%EC%9E%88%EB%8A%94-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%ED%86%B5%EC%8B%A0%EC%8B%9C%ED%82%A4%EA%B8%B0

2024년 2월 22일 (목) 22:50 기준 최신판

설치[편집 | 원본 편집]

https://docs.docker.com/engine/install/

패키지 관리자를 통한 설치는 최신 버전 설치가 안됨

우분투[편집 | 원본 편집]

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

권한 없음[편집 | 원본 편집]

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

docker를 sudo 권한으로 사용하여야 함. 그냥 sudo 붙여도 되는데 vscode 등에서 사용하기 불편해짐.

Vscode docker permission.png

#sudo usermod -aG docker [사용자이름]
sudo usermod -aG docker $USER

# 그룹 갱신
newgrp docker

# 이후 docker 서비스 재시작
# service
sudo service docker restart
# systemctl
sudo systemctl restart docker

# 안되면 재부팅 ㄱㄱ

예제[편집 | 원본 편집]

각 컨테이너는 ip 말고 이름으로 연결

docker-compose.yml

version: "3.7"

services:
  caddy:
    image: caddy
    container_name: wiki-caddy
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
      - 443:443/udp
    volumes:
      - ./config/caddy/Caddyfile:/etc/caddy/Caddyfile
      - ./data/caddy:/data/caddy
# 선택사항
      - ./data/caddy/config/:/config/caddy
      - ./log/caddy/caddy.log:/var/log/caddy/caddy.log
      - ./site:/srv
      
    depends_on:
      - php-fpm # <- 각 컨테이너는 ip 말고 이름으로 연결
      - db # <- 각 컨테이너는 ip 말고 이름으로 연결

    extra_hosts:
      - host.docker.internal:host-gateway
      #- host.docker.internal:127.0.0.1

  php-fpm:
    build:
      dockerfile: dockerfile-php-fpm
    container_name: wiki-php-fpm
    restart: unless-stopped
    volumes:
      - ./site:/srv
      - ./log/php-fpm/error.log:/usr/local/var/log/error.log
      - ./log/php-fpm/access.log:/usr/local/var/log/access.log
      - ./config/php-fpm/php-fpm.conf:/usr/local/etc/php-fpm.conf
      - ./config/php-fpm/www.conf:/usr/local/etc/php-fpm.d/www.conf
      - ./config/php-fpm/php.ini:/usr/local/etc/php/php.ini
#    포트 정의는 컴퓨터 외부로 포트 공개가 필요할 경우만 사용. 방화벽 규칙을 무시하도록 되어있음. 컨테이너끼리만 통신하면 없어도 됨.
#    ports:
#      - 9000:9000

  db:
    image: mariadb
    container_name: wiki-mariadb
    environment:
      - "MARIADB_ROOT_PASSWORD=**********"
      - "MARIADB_DATABASE=********"
      - "MARIADB_USER=*********"
      - "MARIADB_PASSWORD=**********"
    volumes:
      - ./config/mariadb/:/etc/mysql
      - ./data/mariadb/:/var/lib/mysql
      - ./db.sql/:/tmp/db.sql
#    ports:
#      - "3306:3306"

dockerfile-php-fpm

ARG PHP_VER=8.0.30

# php 이미지 설정
FROM php:${PHP_VER}-fpm-alpine

# 작업 경로
WORKDIR /srv

# 패키지 업데이트
RUN apk update; apk upgrade

# php 익스텐션 설치
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions
RUN install-php-extensions xml intl imagick
RUN install-php-extensions mysqli pdo_mysql apcu opcache

# 패키지 설치
RUN apk add diffutils vim bash lua5.1

# edge 패키지 추가
RUN echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories
RUN apk add rsvg-convert

# 디렉토리 액세스를 위한 권한 설정
# 도커의 기능 사용하면 아래 필요없음.
RUN apk add -U shadow
ARG UNAME=www-data
ARG UGROUP=www-data
ARG UID=1000
ARG GID=1001
RUN usermod  --uid ${UID} ${UNAME}
RUN groupmod --gid ${GID} ${UGROUP}

# composer 설치
RUN curl -sSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# php.ini 설정
#RUN mv /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini

RUN rm -rf /var/cache/apk /etc/apk/cache
{
	auto_https disable_redirects

	log {
		output file /var/log/caddy/caddy.log {
			roll_size 10MiB
		}
		format json {
			time_format iso8601
		}
		level DEBUG
	}
}

https://www.example.com, :80 {
	root * /srv

	header {
		Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
		X-XSS-Protection "1; mode=block"
		X-Frame-Options SAMEORIGIN
		X-Content-Type-Options nosniff

		Cache-Control public, max-age=3600, s-maxage=3600
	}

    # 각 컨테이너는 ip 말고 이름으로 연결 (
	php_fastcgi php-fpm :9000 {
		split .php
		index index.php
	}

	reverse_proxy /********/* host.docker.internal:9090 {
		transport http {
			tls_insecure_skip_verify
		}
	}
	reverse_proxy /********/* host.docker.internal:9443 {
		transport http {
			tls_insecure_skip_verify
		}
	}

	redir / /w/ permanent
	rewrite /wiki/* /w/index.php?{query}

	respond /w/cache/* 404
	respond /status/* 404
	respond /status 404

	file_server /w/skins/*
	file_server /w/images/*
	file_server /w/resources/*

	encode zstd gzip
}

인터프리터가 1을 반환했습니다. 오류 아래 추가

$wgScribuntoDefaultEngine = 'luastandalone';

기본 바이너리는 속도가 느림 php-luasandbox 확장기능 설치 후 아래 적용

$wgScribuntoDefaultEngine = 'luasandbox';

https://velog.io/@hamdoe/%EC%84%9C%EB%A1%9C-%EB%8B%A4%EB%A5%B8-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%97%90-%EC%9E%88%EB%8A%94-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%ED%86%B5%EC%8B%A0%EC%8B%9C%ED%82%A4%EA%B8%B0