작업에서 Docker 태스크 드라이버 사용하기
작업에서 Docker 태스크 드라이버 사용하기 (Use the Docker task driver in a job)
이름: docker
docker 드라이버는 Nomad에서 일급(first-class) Docker 워크플로를 제공해요. Docker 드라이버는 컨테이너 다운로드, 포트 매핑, 컨테이너 시작·감시·정리까지 처리해요.
Note: Windows 또는 macOS용 Docker Desktop을 사용한다면 FAQ를 확인하세요.
기능, 클라이언트 요구 사항, 플러그인 구성은 Docker 태스크 드라이버 구성을 참조하세요.
출처: 문서
본문
작업 구성 (Task Configuration)
task "webservice" {
driver = "docker"
config {
image = "redis:7"
labels = {
group = "webservice-cache"
}
}
}
docker 드라이버는 작업 명세에서 다음 구성을 지원해요. image만 필수예요.
image— 실행할 Docker 이미지. 이미지는 태그나 사용자 지정 URL을 포함할 수 있으며 필요하다면https://를 포함해야 해요. 기본적으로 Docker Hub에서 가져와요. 태그가 생략되거나latest와 같으면 드라이버는 항상 이미지를 풀(pull)하려 해요. 풀할 이미지가 인증이 필요한 레지스트리에 있으면 자격 증명을 Nomad에 제공해야 해요.
config {
image = "https://hub.docker.internal/redis:7"
}
-
image_pull_timeout— (선택)image에 지정된 Docker 이미지의 진행 중인 풀을 Nomad가 취소하기 전까지 기다리는 시간 지속 시간. 기본값은"5m"이에요. -
args— (선택) 선택적command에 대한 인수 목록.command가 지정되지 않으면 인수가 컨테이너에 직접 전달돼요. 환경 변수 또는 해석 가능한 Nomad 변수에 대한 참조는 태스크 실행 전에 해석돼요. 예를 들어:
config {
args = [
"-bind", "${NOMAD_PORT_http}",
"${nomad.datacenter}",
"${MY_ENV}",
"${meta.foo}",
]
}
-
auth— (선택) 프라이빗 레지스트리에 대한 인증을 제공해요(아래 참조). -
auth_soft_fail(bool: false)— 인증 실패 시 태스크를 실패시키지 않아요. 인증 없이 계속 시도해요. Nomad 클라이언트 구성에auth.helper블록이 있다면 헬퍼가 공개 이미지를 포함한 모든 이미지에 대해 시도돼요. 프라이빗과 공개 이미지를 섞는다면 공개 이미지를 사용하는 모든 작업에auth_soft_fail=true를 포함해야 해요. -
command— (선택) 컨테이너를 시작할 때 실행할 명령.
config {
command = "my-command"
}
-
cgroupns— (선택) 사용할 cgroup 네임스페이스.host또는private로 설정해요. 지정하지 않으면 드라이버는 Docker의 기본값을 사용해요. 자세한 내용은 Docker의 dockerd 참조를 참조하세요. -
container_exists_attempts— (선택) 태스크 생성 중 동일한 태스크에 대해 실행되지 않는 상태의 기존 컨테이너를 발견하면 컨테이너를 제거하려 시도하는 횟수. 기본값은5예요. -
dns_search_domains— (선택) 컨테이너가 사용할 DNS 검색 도메인 목록. 태스크 그룹에network블록과 함께 브리지 네트워킹 모드를 사용한다면 모든 DNS 옵션을 대신network.dns블록에 설정해야 해요. -
dns_options— (선택) 컨테이너가 사용할 DNS 옵션 목록. 태스크 그룹에network블록과 함께 브리지 네트워킹 모드를 사용한다면 모든 DNS 옵션을 대신network.dns블록에 설정해야 해요. -
dns_servers— (선택) 컨테이너가 사용할 DNS 서버 목록(예: ["8.8.8.8", "8.8.4.4"]). Docker v1.10 이상이 필요해요. 태스크 그룹에network블록과 함께 브리지 네트워킹 모드를 사용한다면 모든 DNS 옵션을 대신network.dns블록에 설정해야 해요. -
entrypoint— (선택) 이미지의 entrypoint를 재정의하는 문자열 목록. -
extra_hosts— (선택) host:IP로 주어진 호스트 목록을/etc/hosts에 추가해요. 같은 그룹에 태스크가 두 개 이상 있을 때bridge네트워크 모드에서는 이 옵션이 예상대로 작동하지 않을 수 있어요. 자세한 내용은 업그레이드 가이드를 참조하세요. -
force_pull— (선택)true또는false(기본). 기존 로컬 이미지를 사용하는 대신 항상 최신 이미지를 풀해요. 저장소 태그가 변경 가능(mutable)하다면true로 설정해야 해요. 이미지 태그가latest이거나 생략되면 이 설정과 무관하게 항상 풀돼요. -
group_add— (선택) 컨테이너 사용자에게 적용할 보조 그룹 목록. -
healthchecks— (선택) docker 드라이버가 컨테이너에 내장된 HEALTHCHECK 지시문을 관리하는 방법을 제어하는 구성 블록.healthchecks.disable를 설정해 내장 헬스체크를 비활성화해요.
config {
healthchecks {
disable = true
}
}
-
hostname— (선택) 컨테이너에 할당할 호스트 이름. 이 옵션을 설정한 채 태스크를 여러 개(count) 실행할 때, 태스크가 시작하는 모든 컨테이너는 동일한 호스트 이름을 가져요. -
init— (선택)true또는false(기본). 컨테이너를 실행할 때 init(tini) 시스템을 활성화해요. 활성화하면 컨테이너의 PID1로 init 프로세스가 사용돼요. init 프로세스를 지정하면 좀비 프로세스 수거 같은 init 시스템의 일반적인 책임이 생성된 컨테이너 안에서 수행되는 것이 보장돼요.
사용되는 기본 init 프로세스는 Docker 데몬 프로세스의 시스템 경로에서 찾은 첫 번째 docker-init 실행 파일이에요. 기본 설치에 포함된 이 docker-init 바이너리는 tini를 기반으로 해요.
-
interactive— (선택)true또는false(기본). 컨테이너에서 STDIN을 열린 상태로 유지해요. -
isolation— (선택) Windows 격리 모드를 지정해요:"hyperv"또는"process". 기본값은"hyperv"예요. -
sysctl— (선택) 시작 시 컨테이너에 설정할 sysctl 구성의 키-값 맵.
config {
sysctl = {
"net.core.somaxconn" = "16384"
}
}
Warning: 작업 명세를 JSON으로 생성한다면 맵을 배열로 감싸야 해요. HCL에서처럼 맨 맵(bare map)을 사용하지 마세요.
config {
"sysctl": [
{
"net.core.somaxconn": "16384",
"net.ipv4.tw_reuse": "1"
}
]
}
ulimit— (선택) 시작 시 컨테이너에 설정할 ulimit 구성의 키-값 맵.
config {
ulimit {
nproc = "4242"
nofile = "2048:4096"
}
}
-
privileged— (선택)true또는false(기본). 권한(privileged) 모드는 컨테이너가 호스트의 장치에 접근할 수 있게 해줘요. 또한 이 기능을 위해서는 nomad 에이전트와 docker 데몬이 권한 컨테이너를 허용하도록 구성되어야 해요. -
ipc_mode— (선택) 컨테이너에 사용할 IPC 모드. 기본값은 프라이빗 IPC 네임스페이스의none이에요. 다른 값은 호스트 IPC 네임스페이스를 공유하는host또는 기존 컨테이너의 이름·ID예요. Nomad가 시작한 Docker 컨테이너는 이름을 미리 알 수 없으므로 참조할 수 없다는 점에 유의하세요. 또한 이 옵션을 설정하려면 Nomad 에이전트가 권한 컨테이너를 허용하도록 구성되어야 해요. -
ipv4_address— (선택) 사용자 정의 네트워크를 사용할 때 컨테이너에 사용할 IPv4 주소. Docker 1.13 이상이 필요해요. -
ipv6_address— (선택) 사용자 정의 네트워크를 사용할 때 컨테이너에 사용할 IPv6 주소. Docker 1.13 이상이 필요해요. -
labels— (선택) 시작 시 컨테이너에 설정할 라벨의 키-값 맵.
config {
labels = {
foo = "bar"
"quote.dotted.keys" = "zap"
}
}
load— (선택) 원격 저장소 대신tar아카이브 파일에서 이미지를 로드해요.docker load -i <filename>명령과 동일해요.artifact블록으로 아카이브 파일을 가져온다면, Nomad가 다운로드 후에도 아카이브를 그대로 유지하도록 해야 해요.
artifact {
source = "http://path.to/redis.tar"
options {
archive = false
}
}
config {
load = "redis.tar"
image = "redis"
}
logging— (선택) Docker 로깅 옵션의 키-값 맵. 기본값은 로그 로테이션(max-file=2와max-size=2m)이 있는json-file이에요.
config {
logging {
type = "fluentd"
config {
fluentd-address = "localhost:24224"
tag = "your_tag"
}
}
}
-
mac_address— (선택) 컨테이너가 사용할 MAC 주소(예: "02:68:b3:29:da:98"). -
memory_hard_limit— (선택) 컨테이너가 사용하는 메모리의 최대 허용량(메가바이트). 설정하면 태스크 리소스 구성의memory매개변수는--memory_reservation으로 Docker 드라이버에 전달되는 메모리 예약이 되고,memory_hard_limit은--memory하드 한도로 전달돼요.resources.memory_max가 설정되면 두 한도 중 높은 값이 사용되며,resources.memory_max가 -1이면 하드 한도가 없어요. -
network_aliases— (선택) 네트워크 범위 별칭 목록. 특정 네트워크 범위 안에서 다른 컨테이너가 대체 이름으로 컨테이너를 발견할 수 있는 방법을 제공해요. 네트워크 범위 별칭은 사용자 정의 네트워크의 컨테이너에만 지원돼요.
config {
network_mode = "user-network"
network_aliases = [
"${NOMAD_TASK_NAME}",
"${NOMAD_TASK_NAME}-${NOMAD_ALLOC_INDEX}"
]
}
network_mode— (선택) 컨테이너에 사용할 네트워크 모드. Docker 1.9의 userspace 네트워킹 플러그인을 지원하기 위해 어떤 값도 허용해요. 기본값은 Windows가nat으로 기본 설정되는 것을 제외한 모든 운영체제에서bridge예요. 다른 네트워킹 모드는 호스트의 추가 구성 없이는 작동하지 않을 수 있어요(이는 Nomad의 범위 밖이에요). pre-docker 1.9의 유효한 값은default,bridge,host,none,container:name이에요.
bridge 모드에서 그룹 네트워킹을 사용하는 태스크의 기본 network_mode는 container:<name>이며, 여기서 이름은 태스크 간 네트워크 네임스페이스를 공유하는 데 사용되는 부모 컨테이너의 컨테이너 이름이에요. 그룹 network.mode를 "bridge"로 설정했다면 이 Docker network_mode config를 설정하지 말아야 해요. 그렇지 않으면 컨테이너가 태스크 그룹의 다른 컨테이너에 도달할 수 없게 돼요. 이는 또한 Connect가 활성화된 태스크가 Envoy 사이드카 프록시에 도달하지 못하게 해요. 또한 모든 DNS 옵션을 태스크 구성이 아닌 network.dns 블록에 설정해야 해요.
기본 Docker 네트워크에서 그룹 전체의 브리지 네트워킹으로 마이그레이션하는 과정에 있다면, firewalld가 활성화된 시스템에서 컨테이너가 브리지 인터페이스 밖의 네트워크에 도달하지 못하게 하는 문제를 겪을 수 있어요. 이 동작은 종종 CNI 플러그인이 그룹 네트워크를 신뢰 대상으로 등록하지 않아서 발생하며, network 블록 문서에 설명된 대로 해결할 수 있어요.
-
oom_score_adj— (선택) 태스크가 OOM 킬되기 쉬운 정도를 나타내는 양의 정수(Linux에서만 유효). 기본값은 0이에요. -
pid_mode— (선택)host또는 설정 안 함(기본).host로 설정하면 호스트와 PID 네임스페이스를 공유해요. 또한 이 기능을 위해서는 Nomad 에이전트가 권한 컨테이너를 허용하도록 구성되어야 해요. 자세한 내용은 아래를 참조하세요. -
ports— (선택) 컨테이너에 매핑할 포트 라벨 목록(아래 참조). -
port_map— (선택) 더 이상 사용되지 않음 포트 라벨의 키-값 맵(아래 참조). -
security_opt— (선택)--security-opt에 직접 전달할 문자열 플래그 목록. 예를 들어:
config {
security_opt = [
"credentialspec=file://gmsaUser.json",
]
}
-
shm_size— (선택) 컨테이너의 /dev/shm 크기(바이트). -
storage_opt— (선택) 시작 시 컨테이너에 설정할 저장소 옵션의 키-값 맵. 이는 호스트 dockerd 구성을 재정의해요. 예를 들어:
config {
storage_opt = {
size = "40G"
}
}
-
tty— (선택)true또는false(기본). 컨테이너에 pseudo-TTY를 할당해요. -
uts_mode— (선택)host또는 설정 안 함(기본).host로 설정하면 호스트와 UTS 네임스페이스를 공유해요. 또한 이 기능을 위해서는 Nomad 에이전트가 권한 컨테이너를 허용하도록 구성되어야 해요. -
userns_mode— (선택)host또는 설정 안 함(기본). docker 데몬에서 사용자 네임스페이스 리매핑이 활성화되어 있을 때 호스트의 사용자 네임스페이스를 사용하려면host로 설정해요(사용자 네임스페이스를 효과적으로 비활성화). docker 데몬에 사용자 네임스페이스 리매핑이 활성화되어 있지 않으면 이 필드는 효과가 없어요. -
volumes— (선택) 호스트 경로를 컨테이너 경로에 바인드하기 위한host_path:container_path문자열 목록. 할당 작업 디렉토리 밖의 호스트 경로 마운트는 기본적으로 방지되며, 볼륨을 할당 작업 디렉토리 안에 존재하는 디렉토리로 제한해요. 클라이언트 구성에서docker.volumes.enabled옵션을true로 설정하면 개별 클라이언트에서 할당 작업 디렉토리 밖의 호스트 경로 마운트를 허용할 수 있어요. 볼륨 정의를 더 제어하고 싶다면mount를 사용할 것을 권장해요.
config {
volumes = [
# Use absolute paths to mount arbitrary paths on the host
"/path/on/host:/path/in/container",
# Use relative paths to rebind paths already in the allocation dir
"relative/to/task:/also/in/container"
]
}
volume_driver— (선택) 볼륨을 마운트하는 데 사용되는 볼륨 드라이버 이름.volumes와 함께 사용해야 해요.volume_driver가 생략되면 상대 경로가 할당 디렉토리 안에서 마운트돼요."local"또는 다른 드라이버를 사용하면 명명된 볼륨일 수 있어요.docker.volumes.enabled가 false이면 볼륨 드라이버와 할당 디렉토리 밖의 경로가 허용되지 않아요.
config {
volumes = [
# Use named volume created outside nomad.
"name-of-the-volume:/path/in/container"
]
# Name of the Docker Volume Driver used by the container
volume_driver = "pxd"
}
-
work_dir— (선택) 컨테이너 안의 작업 디렉토리. -
mount— 1.0.1부터 (선택) 컨테이너에 마운트할 mount를 지정해요. volume, bind, tmpfs 유형 마운트가 지원돼요. 여러 번 지정할 수 있어요.
config {
# sample volume mount
mount {
type = "volume"
target = "/path/in/container"
source = "name-of-volume"
readonly = false
volume_options {
no_copy = false
labels = {
foo = "bar"
}
driver_config {
name = "pxd"
options {
foo = "bar"
}
}
}
}
# sample bind mount
mount {
type = "bind"
target = "/path/in/container"
source = "/path/in/host"
readonly = false
bind_options {
propagation = "rshared"
}
}
# sample tmpfs mount
mount {
type = "tmpfs"
target = "/path/in/container"
readonly = false
tmpfs_options {
size = 100000 # size in bytes
}
}
}
mounts— (더 이상 사용되지 않음: 1.0.1에서mount로 대체됨) (선택) 컨테이너에 마운트할 mounts 목록. volume, bind, tmpfs 유형 마운트가 지원돼요.
config {
mounts = [
# sample volume mount
{
type = "volume"
target = "/path/in/container"
source = "name-of-volume"
readonly = false
volume_options = {
no_copy = false
labels = {
foo = "bar"
}
driver_config = {
name = "pxd"
options = {
foo = "bar"
}
}
}
},
# sample bind mount
{
type = "bind"
target = "/path/in/container"
source = "/path/in/host"
readonly = false
bind_options = {
propagation = "rshared"
}
},
# sample tmpfs mount
{
type = "tmpfs"
target = "/path/in/container"
readonly = false
tmpfs_options = {
size = 100000 # size in bytes
}
}
]
}
devices— (선택) 컨테이너에 노출할 devices 목록.host_path가 유일한 필수 필드예요. 기본적으로 컨테이너는 이 장치들을read,write,mknod할 수 있어요. 선택적cgroup_permissions필드로 권한을 제한해요.
config {
devices = [
{
host_path = "/dev/sda1"
container_path = "/dev/xvdc"
cgroup_permissions = "r"
},
{
host_path = "/dev/sda2"
container_path = "/dev/xvdd"
}
]
}
cap_add— (선택)--cap-add에 직접 전달할 문자열 형태의 Linux capability 목록. 유효 capability(cap_add와cap_drop에서 계산)는 클라이언트 노드 구성의allow_caps플러그인 옵션 키로 구성된 허용 capability의 부분 집합이어야 해요. 드라이버 구성의allow_caps필드가 모든 capability를 허용하지 않는다면 여기서"all"은 허용되지 않는다는 점에 유의하세요. 예를 들어:
config {
cap_add = ["net_raw", "sys_time"]
}
cap_drop— (선택)--cap-drop에 직접 전달할 문자열 형태의 Linux capability 목록. 유효 capability(cap_add와cap_drop에서 계산)는 클라이언트 노드 구성의allow_caps플러그인 옵션 키로 구성된 허용 capability의 부분 집합이어야 해요. 예를 들어:
config {
cap_drop = ["mknod"]
}
-
cpu_hard_limit— (선택)true또는false(기본). 소프트 제한 대신 하드 CPU 제한을 사용해요. 기본적으로false이며 이는 소프트 제한이 사용되고 컨테이너가 유휴 용량이 있을 때 CPU 한도를 초과해 버스트할 수 있음을 의미해요. -
cpu_cfs_period— (선택) CPU 사용량 할당량이 측정되는 기간(마이크로초)을 지정하는 정수 값. 기본값은 100000(0.1초)이고 최대 허용 값은 1000000(1초)이에요. -
advertise_ipv6_address— (선택)true또는false(기본). 서비스와 체크를 등록할 때 컨테이너의 IPv6 주소(Docker의 GlobalIPv6Address)를 사용해요. 자세한 내용은 IPv6 Docker 컨테이너를 참조하세요. -
readonly_rootfs— (선택)true또는false(기본). 컨테이너의 파일시스템을 읽기 전용으로 마운트해요. -
runtime— (선택) docker에 전달할 구성된 런타임을 나타내는 문자열. 이는 docker CLI의--runtime인수와 동일해요. 예를 들어 gVisor를 사용하려면:
config {
# gVisor runtime is runsc
runtime = "runsc"
}
pids_limit— (선택) 컨테이너의 pid 한도를 지정하는 정수 값. 기본값은 무제한이에요.
추가로 docker 드라이버는 태스크의 user 옵션을 통해 컨테이너의 사용자를 사용자 지정할 수 있어요.
컨테이너 이름 (Container Name)
Nomad는 이미지를 풀한 후 컨테이너를 만들어요. 컨테이너는 {taskName}-{allocId}로 이름이 지정돼요. 이는 같은 태스크에서 호스트에 여러 컨테이너를 배치하는 데(count > 1 등) 필요해요. 이는 또한 각 컨테이너의 이름이 클러스터 전체에서 고유하다는 것을 의미해요.
이것은 구성할 수 없어요.
인증 (Authentication)
프라이빗 저장소(예: dockerhub 또는 quay.io)에서 풀하려면 작업에서 다음과 같이 자격 증명을 지정해야 해요:
- 태스크 구성의
auth옵션. 작업 명세에 레지스트리 사용자 이름과 비밀번호를 하드코딩하지 않도록 Secrets 블록을 사용할 것을 권장해요. - 명시적인 저장소 자격 증명을 저장하거나 Docker
credHelpers를 파일에 지정하고 플러그인 옵션에서 클라이언트에 auth config 값을 설정해요. - 플러그인 옵션에서 클라이언트에 auth helper를 지정해요.
auth 객체는 다음 키를 지원해요:
username— (선택) 계정 사용자 이름.password— (선택) 계정 비밀번호.server_address— (선택) 프로토콜이 없는 서버 도메인/IP. 기본적으로 Docker Hub가 사용돼요.
예제 태스크 구성:
task "example" {
secret "docker_auth" {
provider = "nomad"
path = "/path/to/auth"
}
driver = "docker"
config {
image = "secret/service"
auth {
username = "${secret.docker_auth.username}"
password = "${secret.docker_auth.password}"
}
}
}
$PATH에서 "docker-credential-ecr-login"과 "docker-credential-vault"라는 두 개의 헬퍼 스크립트를 사용하는 예제 docker 구성:
{
"auths": {
"internal.repo": {
"auth": "`echo -n '<username>:<password>' | base64 -w0`"
}
},
"credHelpers": {
"<XYZ>.dkr.ecr.<region>.amazonaws.com": "ecr-login"
},
"credsStore": "secretservice"
}
$PATH에서 "docker-credential-ecr-login" 헬퍼 스크립트를 사용하는 예제 에이전트 구성:
client {
enabled = true
}
plugin "docker" {
config {
auth {
# Nomad will prepend "docker-credential-" to the helper value and call
# that script name.
helper = "ecr-login"
}
}
}
주의하세요! 현재 이러한 자격 증명은 Nomad에 일반 텍스트로 저장돼요. 시크릿 관리는 이후 릴리스에서 추가될 예정이에요.
비보안 레지스트리 (Insecure Registries)
TLS 없이 레지스트리에서 이미지를 풀하려면 Docker 데몬의 insecure-registries 플래그를 구성해야 해요. 추가 Nomad 클라이언트 구성은 필요 없어요. 보안되지 않은 레지스트리는 클라이언트에서 로컬로 실행되는 레지스트리나 레지스트리와의 통신이 다른 방식으로 암호화되는 경우에만 허용해야 해요. dockerd 구성 파일에 insecure-registries 플래그를 나열해요.
{
"insecure-registries": ["example.local:5000"]
}
네트워킹 (Networking)
Docker는 호스트 인터페이스, SDN 등을 포함한 다양한 네트워킹 구성을 지원해요. Nomad는 Docker처럼 기본적으로 bridged 네트워킹을 사용해요.
Docker 1.9의 사용자 지정 네트워킹 플러그인을 포함한 다른 네트워킹 옵션을 지정할 수 있어요. 이를 작동시키려면 호스트에서 추가 구성을 수행해야 할 수 있어요. 이 추가 구성은 Nomad의 범위 밖이에요.
포트 할당 (Allocating Ports)
네트워킹 페이지에 설명된 포트 구문을 사용해 태스크에 포트를 할당할 수 있어요. 요약은 다음과 같아요:
group {
network {
port "http" {}
port "https" {}
}
task "example" {
driver = "docker"
config {
ports = ["http", "https"]
}
}
}
포트 전달 및 노출 (Forwarding and Exposing Ports)
Docker 컨테이너는 일반적으로 Dockerfile에서 EXPOSE 지시문을 지정해 서비스가 수신 대기할 포트를 지정해요.
동적 포트는 Dockerfile에서 노출한 포트와 일치하지 않으므로, Nomad는 ports 필드에 지정된 모든 포트를 자동으로 노출해요.
이 포트들은 환경 변수로 식별돼요. 예를 들어:
group {
network {
port "http" {}
}
task "api" {
driver = "docker"
config {
ports = ["http"]
}
}
}
Nomad가 http에 대해 api 태스크에 포트 23332를 할당하면, 23332는 자동으로 노출되어 컨테이너로 전달되고, 드라이버는 값 23332를 가진 NOMAD_PORT_http 환경 변수를 설정해 컨테이너 안에서 읽을 수 있게 해요.
이는 더 나은 성능을 위해 host 네트워킹 옵션을 사용하기 쉬운 방법을 제공해요.
포트 맵 사용하기 (Using the Port Map)
기존의 포트 매핑 방법을 선호한다면 포트 구성에서 to 필드를 지정할 수 있어요. 다음과 같아요:
group "example" {
network {
port "redis" { to = 6379 }
}
task "example" {
driver = "docker"
config {
image = "redis"
ports = ["redis"]
}
}
}
Nomad가 할당에 포트 23332를 할당하면 Docker 드라이버는 호스트의 23332에서 컨테이너의 6379로의 포트 매핑을 자동으로 설정하므로 그냥 작동해요.
기본적으로 이것은 bridged 네트워킹 모드에서만 작동한다는 점에 유의하세요. 노출과 포트 전달에 동일한 API를 구현하는 사용자 지정 네트워킹 플러그인에서도 작동할 수 있어요.
더 이상 사용되지 않는 port_map 구문 (Deprecated port_map Syntax)
Nomad 0.12까지는 태스크의 리소스 블록에서 포트를 지정하고 docker port_map 필드로 설정할 수 있었어요. 그룹 네트워크 리소스 할당에 더 많은 기능이 추가됨에 따라 태스크 기반 네트워크 리소스는 더 이상 사용되지 않아요. 이와 함께 port_map 필드도 더 이상 사용되지 않으며 태스크 네트워크 리소스에서만 사용할 수 있어요.
사용자는 그룹 network 블록에서 포트를 정의하고 태스크가 매핑할 포트를 ports 필드로 지정하도록 작업을 마이그레이션해야 해요.
컨테이너 IP 광고하기 (Advertising Container IPs)
weave 같은 네트워크 플러그인을 사용할 때 컨테이너에 라우팅 가능한 IP 주소를 할당한다면, 그 주소는 태스크의 service 광고에 자동으로 사용돼요. service의 address_mode 매개변수를 사용해 광고되는 주소를 재정의할 수 있어요. 자세한 내용은 service를 참조하세요.
네트워킹 프로토콜 (Networking Protocols)
Docker 드라이버는 tcp와 udp 프로토콜 모두에 포트를 구성해요.
이것은 구성할 수 없어요.
기타 네트워킹 모드 (Other Networking Modes)
container나 none 같은 일부 네트워킹 모드는 Nomad 외부에서의 조정이 필요해요. 이러한 옵션에 대한 일급 지원은 나중에 Nomad 플러그인이나 동적 작업 구성을 통해 개선될 수 있어요.