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 3 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 -a
liệt kê tất cả những dockerdocker ps
liệ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> bash
truy cập vào terminal của containerCtrl + P
sau đó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, 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 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 -p
CMD
sử dụng khi muốn thực thi 1 command trong quá trình build 1 container từ docker imageADD
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/#addCOPY
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/#copyEXPOSE
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ỉ 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 đóADD
có 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:32779
Note: 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