이것저것 기록

[Docker] 도커 이미지 내려받기, 이미지 레이어란? 본문

Data Science/New Tech

[Docker] 도커 이미지 내려받기, 이미지 레이어란?

anweh 2021. 6. 5. 18:54

0. 도커 이미지란? 

  • 이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있다. 쉽게 이해하자면 가상환경 세팅을 위한 '레시피'이다. 내가 어떤 코드를 돌리기 위해서, pythondms 3.6버전을 쓰고 Numpy는 xx버전을 쓰고, pandas는 dd버전을 쓰고, 이 모든 것을 적어놓고 다운받으면 그대로 세팅해주는 레시피이다. 
  • 이러한 이미지를 여러개 쌓아, 내가 원하는 환경을 구축하는 것이다. 

 

1. 기존에 다운받은 이미지가 있는지 확인

$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
  • $docker images 명령어 입력
  • 위와 같이 나온다면 기존에 다운받은 이미지가 아무것도 없는 것

 

 

2. 도커 내 이미지 검색하기

$ docker search sql

NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
crate                         CrateDB is a distributed SQL database that h…   181       [OK]       
sqlpad/sqlpad                 Run SQL in your browser and chart the result…   31                   
nouchka/sqlite3               Sqlite3 command line in a docker container      30                   [OK]
exoplatform/sqlserver         SQL Server image for testing purposes.          24                   [OK]
sflyr/sqlplus                 Oracle SQLplus client-in-a-docker               18                   [OK]
coleifer/sqlite-web           Docker image for running web-based SQLite da…   7                    
keinos/sqlite3                Latest release of SQLite3 container. (Alpine)   7                    
marcelhuberfoo/sqldeveloper   Oracle SQL Developer to query/mange Oracle a…   5                    [OK]
githubfree/sql_exporter       Database agnostic SQL exporter for Prometheus   4                    [OK]
sstc/sqlite3                  A sqlite3 client.                               4                    [OK]
fabiang/sqlcmd                Docker image for sqlcmd to query Microsoft S…   2                    [OK]
mamohr/sqlcmd                 This image can be used to run SQL queries ag…   2                    [OK]
sqlpassion/sqlserver                                                          2                    
alexk002/sqlserver2019_demo                                                   2                    
fufuhu/sql-migrate            golang sql-migrate docker image                 1                    [OK]
googlesky/sqlmap              unofficial sqlmap docker image based on Cent…   1                    
justwatch/sql_exporter        Prometheus SQL Exporter                         1                    
sqlflow/sqlflow               SQLFlow official docker images                  1                    
dbhi/sql-agent                SQL Agent HTTP interface                        1                    [OK]
jakubknejzlik/sql-datapump    Pump for database data migration using SQL.     0                    [OK]
redgate/sqldatacatalog        Redgate SQL Data Catalog                        0                    
18fgsa/sql-clients            Clients for assorted RDBMSes                    0                    
jakubknejzlik/sql-query       Simple container that runs SQL query            0                    [OK]
firststreet/sql-to-s3         Backup SQL databases to S3                      0                    
consensysbounties/sql_jobs              
  • $docker search [옵션] <검색어> 명령어를 입력
    • --filter filter: Filter output based on conditions provided     
    • --limit int: Max number of search results (default 25)
    • --no-trunc: Don't truncate output
    • --format string: Pretty-print search using a Go template
  • sql 이미지를 검색하면 위와 같이 나온다. 옵션 설명에 써있는 것처럼 limit int의 디폴트값이 25로 설정 돼 있기 때문에 모오오오든 이미지를 검색하고 싶다면 다음과 같이 입력한다. 
    • $docker search sql --no-trunc=True 

 

 

3. 도커 이미지 내려받기 

$ docker pull mysql

Using default tag: latest
latest: Pulling from library/mysql
69692152171a: Extracting [=======>                                           ]  4.129MB/27.15MB
1651b0be3df3: Download complete 
951da7386bc8: Download complete 
0f86c95aa242: Download complete 
37ba2d8bd4fe: Download complete 
6d278bb05e94: Download complete 
497efbd93a3e: Download complete 
f7fddf10c2c2: Download complete 
16415d159dfb: Downloading [>                                                  ]  2.157MB/115.8MB
0e530ffc6b73: Download complete 
b0a4a1a77178: Waiting 
cd90f92aa9ef: Waiting 
  • $docker pull [옵션] <이미지명>[:태그명] 명령어 입력
    • 태그를 생력하면 항상 최신(latest) 이미지를 다운받는다. 만약 특정 버전의 이미지를 다운받고 싶다면 $docker pull mysql:5.7 << 이처럼 버전을 입력해주자. 
    • -a, --all-tags: Download all tagged images in the repository
    • --platform string: Set platform if server is multi-platform capable
    • -q, --quiet: Suppress verbose output
    • --disable-content-trust: Skip image verification (default true)
  • 여기서 도커 이미지 내 레이어에 대해 이해할 필요가 있다. 도커 이미지는 레이어로 구성된다. 위의 shell 코드에서 cd90f92aa93f, b0a4a1a77178등과 같은 건 모두 레이어이다. 레이어는 차례차례 쌓이며, mysql같은 경우 마지막 레이어는 cd90f92aa93f인 것이다. 이미지 내 레이어는 나중에 이미지를 빌드할 때 중요한 개념이기 때문에 한 번 짚고 넘어가는 게 좋다고 생각한다. 

출처: https://eqfwcev123.github.io/2020/01/30/%EB%8F%84%EC%BB%A4/docker-image-layer/

  • 위 이미지에서 Images A를 살펴보면, 총 3개의 레이어로 구성 돼 있다. 이렇게 3개의 이미지 레이어로 구성된 도커 이미지를 $Docker run 명령어를 사용해 컨테이너로 만드는 순간!! 마지막에 container layer가 추가되면서 컨테이너로 동작하기 시작하는 것이다. 
  • 컨테이너로 동작하기 시작하면, 사용자가 입력하고 하는 모든 행동은 container layer에서 이루어지며, 환경을 구성하는 이미지 레이어를 변경하는 것은 불가능하다. 
  • 이미지 레이어는 컨테이너가 종료되도 사라지지 않지만, 컨테이너를 exit 하면 container layer만 사라지게 된다. 만약 내가 작업하던 container layer을 이미지 레이어로 저장하고 싶다면 $docker commit 명령어를 사용해준다. (이 부분은 나중에 새로 포스팅 해야겠다)

 

 

4. 내려받은 도커 이미지 확인

  • $docker images 를 입력하여 잘 다운받아졌는지 확인해보자.
$ docker images

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    c0cdc95609f1   3 weeks ago   556MB

 

Comments