Docker Cơ Bản - Tạo 1 Images Và Push DockerHub - Part 2

Images

  • Để xem danh sách các images được chạy trên máy bạn dùng lệnh docker images trên ảnh là danh sách cách images : mysql, redis, hello-word and ruby chạy trên máy mình. Các cột tương ứng : Tag, Image ID,Created,Size Để tải thêm 1 images các bạn có thể dùng 2 cách : c1: docker run hello-world (docker sẽ tự tải về sau khi kiểm tra trên máy bạn không có hello-world image) c2: bạn có thể vào trang https://hub.docker.com/explore/ để tải về : docker pull <author_name/image_name:tag> (phần :tag là options, nếu để trống thì mặc định download bản latest ) Ví dụ: docker pull ubuntu => download ubuntu latest docker pull ubuntu:16.04 => download ubuntu version 16.04

Các lệnh dùng với image và container

  • docker ps -a liệt kê tất cả những docker
  • docker ps liệt kê những docker đang chạy
  • docker stop <container_id hoặc name_container> dừng 1 container
  • docker stop $(docker ps -a -q) dừng tất cả các docker đang dùng
  • docker start <container_id hoặc name_container> khởi động lại container
  • docker rm <container_id hoặc name_container> xóa 1 container
  • docker rm $(docker ps -a -q) xóa tất cả các docker
  • docker exec -it <container_id hoặc name_container> bash truy cập vào terminal của container
  • Ctrl + P sau đó Ctrl + Q để thoát khỏi container mà vẫn giữ nó chạy
  • docker attach <container_id hoặc name_container> để vào lại container
  • exit để thoát khỏi container
  • docker rmi <image_id> xóa image (Chỉ xóa được image khi không còn container nào được tạo ra bởi image đó nữa)

Build Image

Mình sẽ thử build 1 image chạy rails app.

  1. Tất nhiên là bạn phải install rails trên máy mình
  2. Tạo 1 app rails new demo
  3. bundle install
  4. Tạo file Dockerfile (tùy thích bạn có thể đặt là Dockerfile.development,....)
    FROM ubuntu:16.04
    FROM ruby:2.4.1
    
    ENV RAILS_ROOT /app
    ENV NODE_VERSION 8
    
    RUN apt-get update && \
        apt-get install -y curl build-essential git default-libmysqlclient-dev imagemagick
    
    RUN curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - && \
        apt-get install -y nodejs && \
        rm -rf /var/lib/apt/lists/*
    
    RUN npm install -g yarn
    
    RUN mkdir -p $RAILS_ROOT
    WORKDIR $RAILS_ROOT
    ADD Gemfile* $RAILS_ROOT/
    RUN bundle install
    COPY . ./
    EXPOSE 3000
    
    CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
    
    Giải thích : FROM ubuntu, ruby image sẽ được cài sẵn ubutu và ruby với từ khóa FROM (được đặt trên cùng) MAINTAINER tên người tạo image ENV định nghĩa biến môi trường RUN để chạy khi container được khởi động (taọ môi trường để chạy được rails app : build-essential, nodejs, ...) RUN mkdir -p CMD sử dụng khi muốn thực thi 1 command trong quá trình build 1 container từ docker image ADD là copy 1 file or 1 thư mục or remote file tới file hệ thống của image https://docs.docker.com/engine/reference/builder/#add COPY là copy 1 file or 1 thư mục tới file hệ thống của image https://docs.docker.com/engine/reference/builder/#copy EXPOSE mặc định sẽ chạy ở cổng 3000 Note: ở đây sẽ có người hỏi sự khác nhau của ADD và COPY: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#env ở document của docker có chỉ ra COPY được ưa thích hơn bởi nó minh bạch hơn ADD : COPY chỉ giup việc copy file local vào container trong khi đó ADD có 1 số tính năng (remote file)
  5. Build image docker build [OPTION] [path/to/Dockerfile] VD : docker build -t minhdt/demo:1.0 .
  6. Run image docker run --name demo -d minhdt/demo:1.0 (name là conatiner's name)
  7. Sau đó mình kiểm tra xem docker có chạy không docker ps Note: Bạn có thể test trên local bằng cách mở port (-P) trong file dockerfile: docker run -P --name demo -d demo:1.0 (nếu tồn tại container's demo name bạn cần stop và remove đi hoặc đặt 1 tên khác ) Bạn có thể truy cập local : localhost:32779 Note: bạn có thể set port : docker run -p 3000:3000 --name demo -d demo:1.0

Push Images To Docker Hub

  1. Tạo tài khoản trên docker hub : https://hub.docker.com
  2. login : docker login
  3. docker push minhdt/demo:1.0
  4. bạn có thể kiểm tra trên https://hub.docker.com/r/minhdt/demo/tags

Kết

Vậy là mình đã giới thiệu xong về Docker cơ bản, mọi người có thể tham khảo thêm ở: 1, https://www.docker.com/ 2, https://hub.docker.com


All Rights Reserved