lazupa에서 Docker 이야기 도입편 배우기
자기 소개
사회인이 된 첫해의 SIER 두부.
잘 부탁드립니다.
나의 분배 단위는 클라우드의 시스템 개발을 어떻게 교묘하게 활용할 것인가를 연구하고 있다. 신인인 나는 마이크로 서비스, Site Reliability Engineering(SRE)이 어떤 것인지, 왜 최근의 유행인지 스스로 이해하도록 한다.
Docker를 써본 적이 없어서 일단 만져보는 심정으로 선배에게서 빌린 것실천 컨테이너 개발 입문을 읽었다.
어떤 OS로 Docker를 구동할까 하다가 집에서 쓰지 않았던 lazupa(Raspberry Pi3 Model B+)가 생각나서 이걸로 해보기로 했어요.
그나저나 선배와 상사는 나에게 "자원이 부족해서 이동Docker를 추천하지 않지만 마음대로 하세요"라고 말했다.
트레일러 설정 및 Docker 설치
컴퓨터부터 실러캔스 파이까지 ssh1
고무의 OSraspbian buster lite(Kernel version : 4.19)를 넣었어요.
같은 네트워크에 있는 PC에서 ssh를 할 수 있도록 우선 와이파이 설정을 추적한다.
루트 디렉토리supplicant.conf 파일을 만들어서 lazupi를 시작하면 Wi-Fi와 관련된 설정을 자동으로 설정합니다.
wpa_supplicant.confcountry=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="たとえばatermなんちゃらみたいなSSID名"
psk="ぱすわーど"
}
다음은 ssh를 위해 루트 디렉터리에 빈 ssh 파일을 만듭니다.
console$ touch ssh
이렇게 되면 초기 설정이 끝난다.전원을 톱니바퀴에 연결하여 시동을 걸면 PC는 톱니바퀴 ssh를 사용할 수 있을 것이다.
저는 컴퓨터가 Windows이기 때문에 Giit Bash부터 ssh를 시작하기로 했습니다.
console$ ssh [email protected]
초기 암호는 raspberry
입니다.
ssh가 가능하면hostname과password를 변경합니다.
다음은 라떼파의 콘솔에서hostname은 Blackpi입니다.
그리고 이게 내 거야. 내 뇌를 리젠7의 라주파장으로 오인했어.
Ryzen7 (큰 거짓말)
- 두부완자와(@BlueTofuchic) September 2, 2019
Docker 설치
컴퓨터부터 실러캔스 파이까지 ssh1
고무의 OSraspbian buster lite(Kernel version : 4.19)를 넣었어요.
같은 네트워크에 있는 PC에서 ssh를 할 수 있도록 우선 와이파이 설정을 추적한다.
루트 디렉토리supplicant.conf 파일을 만들어서 lazupi를 시작하면 Wi-Fi와 관련된 설정을 자동으로 설정합니다.
wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="たとえばatermなんちゃらみたいなSSID名"
psk="ぱすわーど"
}
다음은 ssh를 위해 루트 디렉터리에 빈 ssh 파일을 만듭니다.console
$ touch ssh
이렇게 되면 초기 설정이 끝난다.전원을 톱니바퀴에 연결하여 시동을 걸면 PC는 톱니바퀴 ssh를 사용할 수 있을 것이다.저는 컴퓨터가 Windows이기 때문에 Giit Bash부터 ssh를 시작하기로 했습니다.
console
$ ssh [email protected]
초기 암호는 raspberry
입니다.ssh가 가능하면hostname과password를 변경합니다.
다음은 라떼파의 콘솔에서hostname은 Blackpi입니다.
그리고 이게 내 거야. 내 뇌를 리젠7의 라주파장으로 오인했어.
Ryzen7 (큰 거짓말)
- 두부완자와(@BlueTofuchic) September 2, 2019
Docker 설치
공식 DOC 데비안 레슨에서. 참조br/>
Docker 다운로드 소스까지 날아간 후,linux 아래에raspbian이 사용할 준비가 되어 있습니다. 협조하겠습니다.p>
pi@blackpi:~ $ sudo apt-get update
pi@blackpi:~ $sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
pi@blackpi:~ $ curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo apt-key add -
pi@blackpi:~ $ sudo add-apt-repository "deb [arch=armhf] https://download.docker.com/linux/raspbian $(lsb_release -cs) stable"
(省略)
aptsources.distro.NoDistroTemplateException: Error: could not find a distribution template for Raspbian/buster
야옹
편한 스크립트가 있어서 그걸로 해요.(처음부터 여기 있었을지도 몰라요.)
pi@blackpi:~ $ curl -fsSL https://get.docker.com -o get-docker.sh
pi@blackpi:~ $ sudo sh get-docker.sh
이 녀석을 움직이면 세밀한 설정부터 Docker 설치까지 단숨에 할 수 있을 것 같다.
pi@blackpi:~ $ docker -v
Docker version 19.03.1, build 74b1e89
Docker 버전이 표시되면 설치가 완료됩니다.
공개된 Docker 이미지 다운로드
console
pi@blackpi:~ $ docker image pull gihyodocker/echo:latest
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/create?fromImage=gihyodocker%2Fecho&tag=latest: dial unix /var/run/docker.sock: connect: permission denied
pi@blackpi:~ $ docker image pull gihyodocker/echo:latest
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/create?fromImage=gihyodocker%2Fecho&tag=latest: dial unix /var/run/docker.sock: connect: permission denied
permission denied !?
이미 공개됐잖아!?
나는
인 줄 알았어공식 DOC 데비안 레슨에서.형이 썼어.
If you would like to use Docker as a non-root user, you should now consider adding your user to the “docker” group with something like:
shsudo usermod -aG docker your-user
Lazu 파이 옆에 있는 사용자 이름을 docker
그룹에 속해야 할 것 같습니다.
pi@blackpi:~ $ sudo usermod -aG docker pi
이렇게 되면 pi
의 사용자는 docker
그룹에 속해야 한다.br/>
다음 명령을 사용하여 확인할 수 있습니다
pi@blackpi:~ $ groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spii2c gpio docker
exit ssh를 다시 한 번 한 후에 다시 pull을 해 보았는데 결과는 순조롭게 진행되었습니다
pi@blackpi:~ $ docker image pull gihyodocker/echo:latest
latest: Pulling from gihyodocker/echo
723254a2c089: Pull complete
abe15a44e12f: Pull complete
409a28e3cc3d: Pull complete
503166935590: Pull complete
abe52c89597f: Pull complete
ce145c5cf4da: Pull complete
96e333289084: Pull complete
39cd5f38ffb8: Pull complete
22860d04f4f1: Pull complete
7528760e0a03: Pull complete
Digest: sha256:4520b6a66d2659dea2f8be5245eafd5434c954485c6c1ac882c56927fe4cec84
Status: Downloaded newer image for gihyodocker/echo:latest
docker.io/gihyodocker/echo:latest
이 Docker 이미지를 실행해 보고 싶습니다.
pi@blackpi:~ $ docker container run -t -p 9000:8080 gihyodocker/echo:latest
standard_init_linux.go:211: exec user process caused "exec format error"
음.
뭐랄까, 나는 이렇게 불평해 보았는데, 마치 armhf가 시작하는 Docker 이미지가 아닌 것 같다.
docker를 처음 사용할 때는 일반적으로 상징적인'고래'이미지를 시도한다sup> 2
pi@blackpi:~ $ docker run docker/whalesay cowsay boo
standard_init_linux.go:211: exec user process caused "exec format error"
스크럽 파이로 시도하는 Docker 이미지는 없죠!?
Docker 이미지 작성 및 컨테이너 실행
디렉터리를 적당히 만들고 다음 두 파일을 만듭니다
package main
import (
"fmt"
"log"
"net/http"
)
func main(){
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
log.Println("received request!")
fmt.Fprintf(w, "Hello Docker!!")
})
log.Println("start server")
server := &http.Server{Addr: ":8080"}
if err := server.ListenAndServe(); err != nil{
log.Println(err)
}
}
FROM golang:1.9
RUN mkdir /echo
COPY main.go /echo
CMD ["go", "run", "/echo/main.go"]
Hello World의 Docker 버전이죠.br/>
Docker 이미지를 만듭니다.
pi@blackpi:~/workspace $ docker image build -t example/echo:latest .
Sending build context to Docker daemon 3.072kB
Step 1/4 : FROM golang:1.9
1.9: Pulling from library/golang
a92bc499a469: Pull complete
d56e34dc5db4: Pull complete
948d2574fcb0: Pull complete
94ced04c5b3f: Pull complete
15b6302ebab8: Pull complete
d0e894008a35: Pull complete
c3d193845877: Pull complete
73ae9a06dd32: Pull complete
Digest: sha256:8b5968585131604a92af02f5690713efadf029cc8dad53f79280b87a80eb1354
Status: Downloaded newer image for golang:1.9
---> aa7ee0df9721
Step 2/4 : RUN mkdir /echo
---> Running in c6994624af15
Removing intermediate container c6994624af15
---> 00bca3e272ba
Step 3/4 : COPY main.go /echo
---> a7a96f63ecad
Step 4/4 : CMD ["go", "run", "/echo/main.go"]
---> Running in 1904e2193002
Removing intermediate container 1904e2193002
---> 53ac562e0136
Successfully built 53ac562e0136
Successfully tagged example/echo:latest
다운로드 또는 제작된 Docker 이미지는 docker container ls -a
또는 docker ps -a
docker images ls
로 확인할 수 있습니다.br/>
만든 Docker 이미지를 기반으로 컨테이너 실행br/>docker images
는 호스트 포트에서 9000여 개의 통신을 컨테이너 포트 8080으로 전송한다는 뜻이다p>
pi@blackpi:~/workspace $ docker container run -d -p 9000:8080 example/echo:latest
6fb7ba7a5f95761799eb2eb6313ed81c67bddd3925cb10513819d5ebb6dc584b
-p 9000:8080
또는 docker container ls -a
로 컨테이너 확인 가능br/>
제거docker ps -a
하면 실행 중인 Docker 이미지만 표시됩니다.br/>-a
에도 포트 전달 설정이 명시되어 있습니다.br/>
또한, PORTS
를 매개 변수로 용기의 사용을 멈추려면
pi@blackpi:~/workspace $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6fb7ba7a5f95 example/echo:latest "go run /echo/main.go" 9 seconds ago Up 4 seconds 0.0.0.0:9000->8080/tcp keen_meninsky
Hello Docker!!
pi@blackpi:~/workspace $ curl http://localhost:9000
Hello Docker!!
정리.
pi@blackpi:~/workspace $ docker container stop keen_meninsky
keen_meninsky
관련 보도
Reference
이 문제에 관하여(lazupa에서 Docker 이야기 도입편 배우기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/BlueTofuchic/items/ceffbe3411b17eebbc58
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(lazupa에서 Docker 이야기 도입편 배우기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/BlueTofuchic/items/ceffbe3411b17eebbc58텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)