사용자 입력이 발생하지 않도록 하고, 포그라운드 프로세스로 실행되도록 해야 함
중지되지 않도록 !!
mkdir c:\docker\webserver
cd c:\docker\webserver
docker container run -p 8080:80 -it --name myweb --rm ubuntu
root@d8baf45ee47c:/# <= -d 옵션을 사용하지 않았기 때문에 attach 모드로 컨테이너가 실행
~~~~ ~~~~~~~~~~~~ ~
| | |
| | +-- 권한 ⇒ 일반사용자($), 루트사용자(#)
| +-- 호스트 이름 = 컨테이너 ID
+-- 사용자 계정
apt-get update
apt-get install apache2
apachectl start
echo "ServerName localhost" >> /etc/apache2/apache2.conf
: echo "ServerName localhost" 이 내용을 /etc/apache2/apache2.conf 이 파일에 써라
echo "ServerName localhost" : 매개변수로 전달된 값을 콘솔에 출력
>>
: 입출력 대상을 변경 ( >
: 덮어쓰기, >>
: 추가하기 )
cat /etc/apache2/apache2.conf
가장 뒤에 ServerName localhost가 붙을 것을 확인할 수 있다.
apachectl restart
ps -efl
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 1147 do_wai 00:36 pts/0 00:00:00 /bin/bash
5 S root 3452 1 0 80 0 - 1703 core_s 00:41 ? 00:00:00 /usr/sbin/apache2 -k start
5 S www-data 3514 3452 0 80 0 - 499492 - 00:46 ? 00:00:00 /usr/sbin/apache2 -k start
5 S www-data 3515 3452 0 80 0 - 499492 - 00:46 ? 00:00:00 /usr/sbin/apache2 -k start
0 R root 3573 1 0 80 0 - 1984 - 00:47 pts/0 00:00:00 ps -efl
apache 관련 프로세스들이 잘 돌고 있는 것을 확인할 수 있다.
ctrl + p + q
⇐ detach 모드로 전환 (--detach-keys 옵션을 이용해서 변경 가능)
이거 잘 안 돼서 그냥 나갔다가
docker container run -p 8080:80 -it -d --name myweb --rm ubuntu
이렇게 함
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca30caadbd22 ubuntu "/bin/bash" 23 seconds ago Up 22 seconds 0.0.0.0:8080->80/tcp myweb
localhost:8080 했는데 밑에처럼 안됨 ㅜㅜ
PS C:\docker\webserver> docker container attach myweb
root@01efebf7fa6d:/#
root@01efebf7fa6d:/# ls /var/www/html
index.html
root@01efebf7fa6d:/# vi /var/www/html/hello.html
\bash: vi: command not found
root@01efebf7fa6d:/# ctrl + p + q
PS C:\docker\webserver>
PS C:\docker> code .
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello, Docker !!! ^..^</h1>
</body>
</html>
docker container cp hello.html myweb:/var/www/html
FROM ubuntu
RUN apt-get update
RUN apt-get install apache2
#RUN apachectl start
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
#RUN apachectl restart
COPY hello.html /var/www/html/
CMD apachectl start
COPY와 ADD는 비슷하지만 차이가 있다
docker image build --tag mywebserver:v1 .
...
1.759 Do you want to continue? [Y/n] Abort.
------ ⇐ 이미지를 빌드하는 과정에서 사용자 입력을 요구하면 오류로 빌드가 중단됨
...
FROM ubuntu
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y apache2
#RUN apachectl start
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
#RUN apachectl restart
COPY hello.html /var/www/html/
CMD apachectl start
참고 ⇒ https://www.cyberciti.biz/faq/explain-debian_frontend-apt-get-variable-for-ubuntu-debian/
docker image build --tag mywebserver:v1 .
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mywebserver v1 a0ad3ba6e326 30 seconds ago 238MB
ubuntu latest a04dc4851cbc 2 weeks ago 78.1MB
docker container run -d --name mywebserver -p 9090:80 --rm mywebserver:v1
cb5fd6cf430b5ffa35b643b9453c0b9414d7ccdffee99f5899fd4fda06244786
docker container ls -a
⇐ mywebserver 컨테이너가 삭제되고 없음
아파치 웹 서버는 기본적으로 백그라운드로 실행
→ 컨테이너 실행과 동시에 아파치를 백그라운드로 실행하고, 컨테이너를 종료
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01efebf7fa6d ubuntu "/bin/bash" 38 minutes ago Up 38 minutes 0.0.0.0:8080->80/tcp myweb
docker container run --name mywebserver -p 9090:80 --rm mywebserver:v1
docker container run --name mywebserver -p 9090:80 --rm mywebserver:v1
⇐ -d 옵션을 생략했으므로 attach 모드로 실행
⇐ 컨테이너가 실행과 동시에 종료되었기 때문에 호스트로 제어권이 반환
원인 : apache가 백그라운드로 실행되니까!
FROM ubuntu
ENV DEBIAN_FRONTEND=noninterative
RUN apt-get update
RUN apt-get install -y apache2
#RUN apachectl start
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
#RUN apachectl restart
COPY hello.html /var/www/html/
CMD apachectl -D FOREGROUND
docker image build --tag mywebserver:v2 .
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mywebserver v1 a0ad3ba6e326 11 minutes ago 238MB
mywebserver v2 97ca973a2aca 11 minutes ago 238MB
ubuntu latest a04dc4851cbc 2 weeks ago 78.1MB
docker container run -d --name mywebserver -p 9090:80 --rm mywebserver:v2
074399d44a10ec31408aa68c78b1e4cd5c521f4c4a66548c85a09ca50b7050ee
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
074399d44a10 mywebserver:v2 "/bin/sh -c 'apachec…" 15 seconds ago Up 14 seconds 0.0.0.0:9090->80/tcp mywebserver
01efebf7fa6d ubuntu "/bin/bash" 47 minutes ago Up 47 minutes 0.0.0.0:8080->80/tcp myweb
FROM ubuntu
RUN mkdir /test
RUN fallocate -l 100m /test/dummy
RUN rm /test/dummy
PS C:\docker\layer> docker image build -t falloc_100m -f Dockerfile_100m .
~~~~~~~~~~~~~~~~~~
빌드에 사용할 Dockerfile 이름을 지정
PS C:\docker\layer> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
falloc_100m latest 386866128967 56 seconds ago 183MB
PS C:\docker\layer> docker image pull ubuntu
PS C:\docker\layer> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
falloc_100m latest 386866128967 About a minute ago 183MB ⇐ 대략 100m 이상 켜졌음
ubuntu latest a04dc4851cbc 2 weeks ago 78.1MB
FROM ubuntu
RUN mkdir /test && \
fallocate -l 100m /test/dummy && \
rm /test/dummy
PS C:\docker\layer> docker image build -t falloc_0m -f Dockerfile_0m .
PS C:\docker\layer> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
falloc_0m latest f0c8def88f4f 15 seconds ago 78.1MB ⇐ 베이스 이미지와 크기가 거의 동일
falloc_100m latest 386866128967 7 minutes ago 183MB
ubuntu latest a04dc4851cbc 2 weeks ago 78.1MB
개발 및 디버깅 용도로 사용하는 도구(예: vi, gcc, javac, ifconfig, ...)
캐시, 로그 파일
###
package main
import "fmt"
func main() {
fmt.Println("Hello, Docker")
}
FROM golang
WORKDIR /goapp
COPY hello.go .
RUN go env -w GO111MODULE=auto
RUN go build -o hello.exe .
워드프레스는 사이트의 기본 URL(예: siteurl 및 home)을 데이터베이스에 저장합니다. 보통 이 값은 wp_options 테이블에 기록되는데, 한 번 설정되면 컨테이너를 삭제해도 별도의 DB(예: docker 컨테이너로 실행 중인 wordpressdb)에 저장된 값은 그대로 남게 됩니다.
따라서 처음 생성했을 때 임의로 할당된 포트 번호(55742)가 사이트 URL에 포함되어 저장되고, 이후 컨테이너를 새로 만들더라도 DB의 정보(즉, 기존의 포트 번호)를 그대로 사용하게 되어 localhost:56045로 접속하더라도 자동으로 55742 포트로 리다이렉트 되는 것입니다.
이 문제를 해결하려면 워드프레스 DB의 siteurl과 home 값을 새 포트 번호에 맞게 수정해주어야 합니다. 데이터베이스에 직접 접속하여 wp_options 테이블의 해당 값을 변경하거나, wp-config.php에 상수를 정의하는 방법도 있습니다.
wp_options 테이블 직접
수정하니 잘되는것 같습니다.