Zero To One
Docker Command Line 명령어 본문
https://docs.docker.com/engine/reference/commandline/container_run/
docker/whalesay 실행
docker/whalesay:latest 라는 문장은 다음와 같이 읽을 수 있습니다.
- Docker Hub라는 레지스트리에서
- docker라는 유저가 등록한 whalesay 이미지 혹은 레포지토리에서
- latest 태그를 가진 이미지
https://hub.docker.com/r/docker/whalesay
1. 최신 이미지 받아오기
> sudo docker image pull docker/whalesay:latest
latest: Pulling from docker/whalesay
Image docker.io/docker/whalesay:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists
a3ed95caeb02: Already exists
00bf65475aba: Already exists
c57b6bcc83e3: Already exists
8978f6879e2f: Already exists
8eed3712d2cf: Already exists
Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b
Status: Image is up to date for docker/whalesay:latest
docker.io/docker/whalesay:latest
2. 이미지 리스트 출력
> sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest b9bd7e513e0f 15 hours ago 144MB
sebcontents/server latest 6d83150df9dd 2 months ago 178MB
sebcontents/client latest 52bfef33cd3d 2 months ago 142MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
sebcontents/part1 latest aa619f16919f 9 months ago 138MB
danielkraic/asciiquarium latest 7bab964067d2 3 years ago 309MB
docker/whalesay latest 6b362a9f73eb 6 years ago 247MB
3. 받아온 이미지를 실행 (이미지 → 컨테이너)
docker container run --name 컨테이너_이름 docker/whalesay:latest cowsay boo
> sudo docker container run --name birdnine docker/whalesay:latest cowsay boo
_____
< boo >
-----
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
위의 형식을 따라 작성되었습니다.
- {container} run
- 컨테이너를 실행합니다.
- [OPTIONS]
- --name : 컨테이너의 이름을 할당합니다.
- [COMMAND]
- command는 초기 컨테이너 실행 시 수행되는 명령어입니다.
- cowsay : 컨테이너 실행 시 cowsay 명령어를 호출합니다. node를 호출하듯 이용합니다.
- [ARG..]
- boo : COMMAND인 cowsay에 넘겨질 파라미터입니다.
4. 모든 컨테이너의 리스트 출력
> sudo docker container ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3554ec35017d docker/whalesay:latest "cowsay boo" 2 minutes ago Exited (0) 2 minutes ago birdnine
69014dc0b0c1 hello-world "/hello" 17 minutes ago Exited (0) 17 minutes ago awesome_chatelet
0fa6e33f5bed sebcontents/client "/docker-entrypoint.…" 4 hours ago Up 4 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp client
74f2a8bdadea sebcontents/server "docker-entrypoint.s…" 4 hours ago Up 4 hours 0.0.0.0:4999->80/tcp, :::4999->80/tcp server
fc661341d0a6 sebcontents/part1 "httpd-foreground" 4 hours ago Up 4 hours 0.0.0.0:3000->80/tcp, :::3000->80/tcp vnfmsqkek3
7b92e91c086e hello-world "/hello" 5 hours ago Exited (0) 5 hours ago happy_chatelet
e5ad4e2d6787 hello-world "/hello" 6 hours ago Exited (0) 6 hours ago trusting_pike
- {container} ps : 컨테이너의 리스트를 출력합니다.
- -a : Default 로는 실행되는 컨테이너지만 종료된 컨테이너를 포함하여 모든 컨테이너를 출력합니다.
5. 삭제
sudo docker container rm 컨테이너_이름
> sudo docker container rm birdnine
birdnine
또한, Stop the container before attempting removal or force remove
이란 에러 문구가 나오면 아래와 같이 입력해 주면 된다.
> sudo docker container rm -f birdnine
6. 도커 이미지 지우기
# docker image 의 용량 확인
docker image ls
# docker/whalesay 이미지 지우기
docker image rm docker/whalesay
danielkraic/asciiquarium
danielkraic라는 사람이 올린 이미지 asciiquarium 를 실행
docker container run -it --rm danielkraic/asciiquarium:latest
pacman 실행해보기
https://github.com/platzhersh/pacman-canvas
1. git clone을 따준다.
git clone git@github.com:platzhersh/pacman-canvas.git
2. httpd를 실행 시킨다.
sudo docker container run --name 컨테이너_이름 -p 818:80 httpd
> sudo docker container run --name birdnine -p 818:80 httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
[Fri Mar 18 07:04:39.857292 2022] [mpm_event:notice] [pid 1:tid 139666027363648] AH00489: Apache/2.4.53 (Unix) configured -- resuming normal operations
[Fri Mar 18 07:04:39.857355 2022] [core:notice] [pid 1:tid 139666027363648] AH00094: Command line: 'httpd -D FOREGROUND'
3. 저 위에걸 그대로 놔둔채로 localhost:818 혹은 127.0.0.1:818에 접속한다.
잘 작동된다!
4. 새로운 터미널을 열고 다음을 입력한다.
> cd pacman-canvas
pacman-canvas로 들어간 뒤,
sudo docker container cp ./ 컨테이너_이름:/usr/local/apache2/htdocs/
docker container cp 커맨드를 입력해 로컬호스트에 있는 파일을 컨테이너에 전달한다.
뭔가 안되면?
sudo docker exec -it 컨테이너_이름 bash
를 입력해서 컨테이너 내부 터미널로 접속해보자.
5. docker container를 이미지로 만들어 보자
sudo docker container commit 컨테이너_이름 my_pacman:1.0
> sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_pacman 1.0 f06e37d39f4a 9 seconds ago 161MB
생성된 이미지를 900 포트에서 웹서버로 구동해보자
sudo docker run --name my_web2 -p 900:80 my_pacman:1.0
또다른 게임
https://github.com/codestates/SpaceInvaders
1. git clone
git clone git@github.com:codestates/SpaceInvaders.git
2.
> sudo docker container run --name ddd -p 818:80 httpd
3. 새로운 터미널에서
> cd SpaceInvaders
4.
> sudo docker container cp ./ ddd:/usr/local/apache2/htdocs/
5. localhost:818 접속