doker의 기본적인 설명이다. 처음 부터 끝까지 간단하게 기록한다.
이것대로 따라 하면, 나름대로 성과는 있을 것이다. 맨 처음 부터 Dockerfile을 많이 핸들링 하지 말고, 다른 사람들이 만들어 놓은 도커 이미지를 활용 하는 것도 하나의 방법이다.
1. Docker 환경 설치
# 리눅스 커널이 최소 3.1 이상이어야 함
$ uname -r
5.13.0-30-generic
# Docker 설치
$ sudo apt update
# ubuntu curl 설치
$ sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https gnupg lsb-release
# GPG 키 및 저장소 추가
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# rpository 추가
$ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 도커 엔진 설치
$ sudo apt update
$ sudo apt-get install docker-ce
# 도커 기본 명령어
$ sudo docker version
$ sudo docker scan --accept-license --version
# Docker 위치 바꾸기
# docker 위치 바꾸기
$ mkdir /home/dockerImages/
$ cd home
$ ll
# docker.servide 파일을 수정 하여, 위치를 비꾸기
vim /lib/systemd/system/docker.service
14번째 라인에서
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root=home/dockerImages/
$service docer stop
$service docker status
$service docker start
$service docker status
# 도커 url 관리 프로그램
$ sudo mkdir -p /var/portainer/data
$ docker run -d -p 9000:9000 --name=portainer --restart=unless-stopped -v /var/run/docker.sock:/var/run/docker.sock -v /var/portainer/data:/data portainer/portainer
# 디렉토리 용량 확인
$ du -sh
도커 URL 관리 프로그램 까지 설치 하면, 도커 엔진은 Ubuntu에서 실행이된다.
도커 URL 프로그램을 관리 하려면, localhost:9000 포트를 이용하면된다.
2. Docker 운영 환경
# ubuntu 이미지 찾기
$ sudo docker search ubuntu
# ubuntu 이미지 pull 하기
$ sudo docker pull ubuntu
# docker 이미지 조회 하기
$ sudo docker images
# docker 컨테이너 bash 실행
$ docker run -it --rm ubuntu:latest bash
# docker Backgroud 실행
$ sudo docker -d --restart always ubunt
※ 파라미터 -d는 Backgroud에서 실행 한다는 의미이다.
※ 파라미터 --restart는 always 정책과 관련 된 옵션이다.
※ Doker 컨테이너는 문제가 생기니, 반드시 DockerFile로 설치하여야 한다.
# docker 컨테이너 상태 확인 하기
$ sudo docker -ps a
※ id : 컨테이너 아이디
※ name : 컨테이너 이름
※ lable : 컨테이너 레이블
※ exited : 컨테이너가 종료 되었을 때 반환하는 숫자 코드
※ status : 컨테이너의 작동 상태
※ ancestor : 컨테이너가 사용하는 이미지
# 추가경로를 설정해 정상적으로 컨테이너 시작 하기
# rstudio 이미지를 받았다고 가정 하였을 경우
$ sudo docker run -d -p 8800:8787 rsutdio
※ 여기에서 -p는 외부에서 호스토로 보낼 요청을 컨테이너 내부로 전달하는 옵션
- p <요청받을 호스트 포트>:< 연결할 컨테이너 포트>
나중에 localhost로 실행 하였을 경우 아래와 같이 실행 하여야 한다.
localhost:8800
# docker port range 정하기
# 한개의 이미지에서 여러개의 사용자로 나누어, 컨테이너를 올릴때
docker run -p 7000-8000:7000-8000
# docker 볼륨 관리 하기
# Dockerfile 예시
$ sudo vi Dockerfile
FROM ubuntu:latest
VOLUME ["/volume/path"]
3. Docker Push 하기
# docker 컨테이너 이미지 만들기 지금까지 작업한 컨테이너를 그대로 저장하고 싶을 때
$ sudo docker commit CONTAINER_NAME IMAGE_NAME:TAG
$ sudo docker commit ubuntu testid/ubuntu:0.1
# Docker 이미지 확인
$ sudo docker images
[ Docker container 현 상태를 images 로 만들기 ]
docker commit -m [image 설명] -a [ 사용자 mail ] [ container Name or ID ] [ 생성할 image name : Tag ]
예) docker commit -m "ip address change" -a "peksoon@naver.com" bb29fe475fb5 peksoon_tomcat:1.0.2
[ Docker images 에 tag 작업 ]
docker tag [ image name or Tag ] [ docker hub ID 혹은 private registry ip:port ] / [ push image이름 ]
예) docker tag 51821aad3f0f peksoon/iksoon_tomcat:1.0.2
[ Docker 허브에 올릴수 있도록 로그인 ]
docker login
[ Docker hub 에 이미지 올리기 ]
docker push [ 생성했던 tag]
예) docker push peksoon/iksoon_tomcat:1.0.2
4. Docker 활용 하기
#Dockerfile 예시 Skip
FROM rocker/rstudio
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
default-jre \
default-jdk
RUN install2.r --error \
--deps TRUE \
rJava
VOLUME ["/home/dokerimage"]
# docker pull 파일
$docker pull rocker/rstudio
# docker file 만들기
$ vi Dockerfile
#Dockerfile
FROM rocker/rstudio
MAINTAINER yonggyu.kim <rdmkyg.gmail.com>
RUN apt-get clean all && \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
libcurl4-openssl-dev \
libxml2-dev \
unixodbc-dev \
cmake \
libssl-dev \
libsasl2-dev \
libmariadb-dev \
default-jre \
default-jdk \
openssh-server \
tzdata \
libxt6 \
language-pack-ko \
locales \
# vim \
# sudo \
apt-utils\
&& apt-get clean all && \
apt-get purge && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# RUN usermod -aG sudo rstudio
#RUN rm /usr/local/lib/R/etc/Rprofile.site
#RUN echo '\n\
# \n # R Profile site setting \
# \n Sys.setlocale(category = "LC_ALL",locale="ko_KR.UTF-8") \
# \n options(repos = "https://cran.rstudio.com") \
# \n setHook(packageEvent("grDevice","onLoad"),function(...)grDevices::pdf.options(family = "korea1")) \
# \n setHook(packageEvent("grDevice','onLoad"),function(...)grDevices::ps.options(family = "korea1")) \
# \n' >> /usr/local/lib/R/etc/Rprofile.site
RUN locale-gen ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["sh", "-c", "/usr/sbin/sshd ; /init"]
# 도커화일 빌드 하기
$ docker build --tag rdmkyg/rstudio .
# root 계정으로 컨테이너 만들기 (주의 할것) docker run -d -p 8787:8787 -e USER=rstudio -e PASSWORD=rstudio \ -e ROOT=TRUE -e PERUSER=FALSE -v $(pwd):/home/rstudio rdmkyg/rstudio
# 아래와 같이 연결 하면 성공
docker run -d -p 2201:22 -p 8787:8787 -e PASSWORD=passwd --name my-rstudio-ssh rdmkyg/rstudio
# rstudio에서 아래와 같이 패키지 설치
install.packages('devtools') install.packages("rJava") install.packages(c('ggplot2','dplyr','tidyr','readr','purrr','tibble','lubridate', 'stringr','forcats','broom','cli','crayon','dbplyr','haven', 'hms','httr','jsonlite','magrittr', 'modelr','pillar','readxl', 'reprex','rlang','revest','xml2','rio','DBI','odbc','mongolite',',RJDBC','curl','data.table','survival','forecast','survminer', 'muhaz','TTR','caret','lattice','e1071','kernlab','shiny','mailR',"trelliscopejs",
"showtext"))
devtools::install_github("r-dbi/RMariaDB") library(devtools) library(rJava)
# Docker 로컬 이미지 만들기 sudo docker commit my-rstudio-ssh rdmkyg/rstudio.ssh
# docker 로그인 하기
$ docker login
# Docker tag 만들기 $docker tag f4de856462da rdmkyg/rstudio.ssh # Docker push 하기 $docker push rdmkyg/rstudio.ssh
# Docker 최종 실행 하기
docker run -d -p 2201:22 -p 8787:8787 -e PASSWORD=passwd --name my-rstudio-ssh rdmkyg/rstudio.ssh
5. 트러블 슈팅
# 나중에 한글 깨짐이 발생 할수 있음 아래와 같이 해결 하여야 함. 조금 특이함
library(ggplot2)
library(showtext)
showtext_auto()
#windows() # if your local os is Windows
# x11() # if your local os is Macos
set.seed(123)
hist(rnorm(1000), breaks = 30, col = "steelblue", border = "white", main = "", xlab = "", ylab = "")
title("히스토그램", , cex.main = 2)
text(2, 70, "N = 1000", , cex = 2.5)
# KONLP 설치
remotes::install_github("mrchypark/multilinguer")
multilinguer::install_jdk()
install.packages("KoNLP",
repos = c("https://forkonlp.r-universe.dev",
"https://cloud.r-project.org"),
INSTALL_opts = c("--no-multiarch")
)
library(KoNLP)
devtools::install_github("r-dbi/RMariaDB")
댓글 없음:
댓글 쓰기