Docker Cơ Bản - Tạo 1 Images Và Push DockerHub - Part 2
Bài đăng này đã không được cập nhật trong 4 năm
- Ở Phần 1 https://viblo.asia/p/docker-co-ban-part-1-RnB5p73wlPG mình đang nói đến việc chạy 1 docker có image là hello-world. Phần 2 mình sẽ nói chi tiết hơn
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 -aliệt kê tất cả những dockerdocker psliệt kê những docker đang chạydocker stop <container_id hoặc name_container>dừng 1 containerdocker stop $(docker ps -a -q)dừng tất cả các docker đang dùngdocker start <container_id hoặc name_container>khởi động lại containerdocker rm <container_id hoặc name_container>xóa 1 containerdocker rm $(docker ps -a -q)xóa tất cả các dockerdocker exec -it <container_id hoặc name_container> bashtruy cập vào terminal của containerCtrl + Psau đóCtrl + Qđể thoát khỏi container mà vẫn giữ nó chạydocker attach <container_id hoặc name_container>để vào lại containerexitđể thoát khỏi containerdocker 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.
- Tất nhiên là bạn phải install rails trên máy mình
- Tạo 1 app
rails new demo bundle install- Tạo file Dockerfile (tùy thích bạn có thể đặt là Dockerfile.development,....)
Giải thích :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"]FROM ubuntu, rubyimage sẽ được cài sẵn ubutu và ruby với từ khóa FROM (được đặt trên cùng)MAINTAINERtên người tạo imageENVđịnh nghĩa biến môi trườngRUNđể chạy khi container được khởi động (taọ môi trường để chạy được rails app : build-essential, nodejs, ...)RUN mkdir -pCMDsử dụng khi muốn thực thi 1 command trong quá trình build 1 container từ docker imageADDlà 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/#addCOPYlà copy 1 file or 1 thư mục tới file hệ thống của image https://docs.docker.com/engine/reference/builder/#copyEXPOSEmặ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ỉ raCOPYđược ưa thích hơn bởi nó minh bạch hơnADD: COPY chỉ giup việc copy file local vào container trong khi đóADDcó 1 số tính năng (remote file) - Build image
docker build [OPTION] [path/to/Dockerfile]VD : docker build -t minhdt/demo:1.0 . - Run image
docker run --name demo -d minhdt/demo:1.0(name là conatiner's name) - 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:32779Note: bạn có thể set port :docker run -p 3000:3000 --name demo -d demo:1.0
Push Images To Docker Hub
- Tạo tài khoản trên docker hub : https://hub.docker.com
- login :
docker login - docker push minhdt/demo:1.0
- 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