도커 13

[Docker] -e 란? 컨테이너 내에서 환경 변수 설정하기

-e는 컨테이너 내부에서 환경 변수를 설정하는 명령어이다. MySQL 이미지를 설치해 환경 변수를 설정해보자. $ docker run -d --name MySQL_test \ -e MYSQL_ROOT_PASSWORD=1234 \ -e MYSQL_DATABASE=wordpress mysql:5.7 $ docker run -d -e WORDPRESS_DB_HOST=mysql \ -e WORDPRESS_DB_USER=root \ -e WORDPRESS_DB_PASSWORD=1234 \ --name wordpress --link wordpressdb:mysql -p 80 wordpress -e 로 MySQL 각각의 환경 변수를 설정해줄 수 있다. CONTAINER ID IMAGE COMMAND CREATED S..

Docker 2022.03.04

[Docker] -i, -t, -d 란?

-i, -t 옵션은 컨테이너와 상호(interactive) 입출력을 가능하게 해준다. t는 tty를 할당하고, i는 표준 입출력을 사용한다. -d 옵션은 -i, -t와는 달리 백그라운드로 작동한다. -it 옵션을 적용하면 컨테이너가 생성과 동시에 실행되며 /bin/bash 로 접근하게 된다. 하지만 -d를 사용하게 되면 정지된 컨테이너만 생성된다. 입출력이 없는 상태로 컨테이너를 실행하는 것이다. $ docker run -it --name test_it ubuntu:18.04 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 254fe0d44a41 ubuntu:18.04 "bash" 5 seconds ago Up 5 seconds tes..

Docker 2022.03.04

[Docker] ifconfig : command not found error

컨테이너의 가상 IP 주소를 받기 위해서는 ifconfig를 실행해야된다. 하지만 bash에서 ifconfig를 실행하면 아래와 같은 에러가 출력될 것이다. # ifconfig bash: ifconfig: command not found 그럴 경우 net-tools를 설치해주면 간단하게 해결된다. # apt-get update # apt-get install net-tools # ifconfig ifconfig를 실행했을 때 eth0 인터페이스와 로컬 호스트인 lo 인터페이스가 존재한다. 각각의 IP 주소를 입력해 컨테이너를 외부에 노출 시킬 수 있다.

Docker 2022.03.04

[Docker] 이미지(Image)를 Docker hub에 Push하기

도커를 한 개의 서버에서 작업을 하고, 본인이 만든 도커 이미지를 다른 서버에서 활용하고 싶을때 도커 허브(Docker hub)에 Push한 후 다른 서버에서 pull을 통해 다른 서버에서 가져갈 수 있을 것이다. Push와 pull에 대한 용어를 잘 모르겠다면 이전 글을 참고하자. 도커 허브에 업로드 하지 않고, 본인이 만든 Dockerfile을 전달해주는 방법도 있고, 이미지를 저장해서 tar file이나 다른 형태로 변환해 전달해주는 방법도 있을 수 있다. 일단 먼저 Push 하는 방법에 대해서 알아보자. 1. Upload Docker Hub 도커 허브에 업로드 하기 위해서는 당연히 도커 허브에 계정이 있어야할 것이다. 도커 계정을 생성한 후 로그인 해보자. 로그인 한 후 Repositories에 ..

Docker 2022.03.03

[Docker] 볼륨(Volume)과 바인드 마운트(bind mount)란?

도커 컨테이너에 사용된 파일들은 컨테이너가 삭제될 때 함께 삭제된다. 도커에서 많은 애플리케이션을 저장해서 계속적으로 사용할 수 있도록 해주는 옵션이 바로 볼륨과 바인드 마운트(bind mount)이다. 바인드 마운트(Bind mount) 바인드 마운트는 호스트 시스템의 어느 곳에나 저장할 수 있고, non-Docker 프로세스나 도커 컨테이너 내에서 언제든지 수정이 가능하다. 또한, 바인드 마운트를 사용하면 호스트 시스템의 파일 또는 디렉터리가 컨테이너에 마운트되며, 파일 또는 디렉토리는 호스트의 전체 경로로 지정된다. 바인드 마운트의 성능은 매우 우수하지만 호스트 파일 시스템에 의존해서 사용되기 때문에 볼륨에 비해 상대적으로 기능이 제한적이다. 내 호스트 파일 시스템 내에 mongodb라는 폴더가 있..

Docker 2022.03.03

[Docker] Docker with python

머신러닝이나 딥러닝을 돌릴때 프레임워크 혹은 패키지의 버전마다 호환되는 파이썬 버전이 다르다. 그렇다면 매번 파이썬을 새로 설치하고 새로 다시 환경을 구축해야될 것이다. 이건 여간 번거로운 일이 아니다. 그렇기 때문에 우리는 도커를 사용해 각 이미지 혹은 각 컨테이너마다 새로운 환경을 구축해 사용할 수 있다. 복잡한 환경, 협업 환경에서는 도커를 사용하는 것이 유용하다. Dockerfile에 내가 사용하는 환경의 정보를 담고 Dockerfile을 공유함으로써 같은 환경에서 파이썬을 실행시킬 수 있기 때문에 오류 없이 제대로 작동할 수 있기 때문이다. 그렇다면 도커 허브에서 파이썬을 pull한 후 도커를 사용해보자. 도커 허브에서 pull하고, run 하는 과정은 이전 글에서 다루었기 때문에 설명은 생략한..

Docker 2022.03.03

[Docker] 이미지(image) 만들기

도커가 동작하는 것을 한 번 살펴보자. 처음에 도커 허브(Docker hub)에서 우리가 필요한 이미지(Image)를 다운 받아오는 것은 pull, 이미지에서 컨테이너를 생성하는 것은 run이라고 이전 글에서 다루었다. 그렇다면 우리가 이미지를 생성해서 우리만의 이미지를 배포하고 싶을땐 어떻게 해야할까? 우리가 새로운 컨테이너를 만들어 해당 컨테이너에서 환경을 구축하고난 후 commit을 하게되면 그 컨테이너는 이미지가 된다. 그렇게 이미지가 되면 해당 이미지를 기반으로 다시 run으로 새로운 컨테이너들을 생성할 수 있을 것이다. 그렇게 생성한 이미지를 도커 허브에 push하게 되면 세상 모든 사람들이 우리가 만든 이미지를 활용할 수 있을 것이다. 배포하고 싶을때 뿐만 아니라, 현재 작업 중인 컨테이너를..

Docker 2022.03.03

[Docker] Host와 File System 연결

우리는 도커 간 파일을 직접 수정했다[참고]. 도커에서 컨테이너를 생성하고, File System 안으로 접근해서 index.html파일을 수정하는 형태로 진행했다. 하지만 컨테이너가 삭제된다면 어렵게 작업한 내용이 전부 날라가게 된다. 컨테이너가 사라지지 않게 설정하면 되기는 한다. 그러나 우리는 컨테이너를 필요할 때 마음대로 생성하고, 삭제하기 위해서 사용한다. 위 그림에서 보이는 것 처럼 컨테이너의 File System 안에 존재하는 /usr/local/apache2/htdocs/ 와 Host의 File System이 서로 연결되고, Host에서 수정한 내용이 컨테이너에서도 반영될 수 있도록 한다면 컨테이너가 날라가더라도 우리의 소스코드는 Host에 남아있기 때문에 보다 안전하게 개발을 진행할 수 ..

Docker 2022.03.03

[Docker] 네트워크 연결하기(httpd)

이전 시간에 아파치 웹서버를 실행하기 위해 httpd 이미지를 설치해보았다. 일단 먼저 도커가 없이 웹서버를 사용하는 방법에 대해서 알아보자. 웹서버를 사용하기 위해서는 두 대의 컴퓨터가 필요하다. 한 대의 컴퓨터에는 Web browser가 설치되어 있고, 다른 컴퓨터에는 Web server가 설치되어 있다고 하자. 그 다음 Web page를 파일로 만들어 저장 장치의 특정 디렉토리에 위치시켜야 한다. 데이터가 저장된 공간을 File System이라고 부르자. 예를 들어 File System 내부에 있는 /user/local/apache2/htdocs/ 라는 디렉토리에 index.html 파일을 위치시켰다고 하자. 그리고 누군가가 Web Server에 웹페이지를 요청하면 해당 디렉토리에서 찾아야 된다고 ..

Docker 2022.03.02

[Docker] 왜 도커를 사용할까? + 설치까지

내 컴퓨터에서 하나의 애플리케이션을 만들기 위해서는 운영체제 위에 여러 소프트웨어를 설치하여야만 한다. 웹 서버라든지, 데이터베이스 라든지 여러 소프트웨어를 깔아서 본인만의 애플리케이션을 만들게 된다. 매번 소프트웨어를 설치하는 일은 상당히 복잡한 일이다. 하지만 네트워크로 통신해 각각의 앱(App)을 가지고 와서 사용할 수 있게 할 수 있다면 얼마나 좋을까? 전문가들이 구축해놓은 운영체제들을 가지고와서 쓸 수 있게 해주는 것이다. 그렇게 된다면 매번 새롭게 앱을 구축하고, 운영체제를 설치하고 하는 방식이 필요 없을 것이다. 본인이 필요한 소프트웨어나 운영체제를 그냥 불러옴으로써 사용할 수 있기 때문이다. VMware나 Virtualbox와 같은 개념이다. 하지만 매번 운영체제에 설치된 앱을 불러오는 과..

Docker 2022.03.02
반응형