Android

Bagaimana hendak menyambung ke bekas kontainer

03. Docker Compose и Best Practice Docker, CI/CD и Gitlab CI. Вечерняя школа Слёрма по Kubernetes.

03. Docker Compose и Best Practice Docker, CI/CD и Gitlab CI. Вечерняя школа Слёрма по Kubernetes.

Isi kandungan:

Anonim

Menyambung ke bekas Docker yang berjalan sangat berguna apabila anda mahu melihat apa yang sedang berlaku di dalam bekas. Jika bekas Docker tidak berfungsi seperti yang dijangkakan, anda boleh melampirkan ke bekas atau mendapatkan cangkerang ke bekas dan jalankan perintah seperti ps atau top . Anda juga boleh memasukkan bekas, memasang pakej baru, dan membina imej Docker baru daripadanya.

Dalam tutorial ini, kami akan menerangkan bagaimana untuk melampirkan ke proses utama utama bekas dan bagaimana untuk mendapatkan shell pada bekas yang berjalan.

Lampirkan kepada Container

Walaupun adalah mungkin untuk menjalankan pelbagai proses dalam bekas, kebanyakan kontainer penyimpan hanya berjalan satu proses. Perintah yang dilaksanakan semasa memulakan bekas ditetapkan dengan menggunakan arahan ENTRYPOINT dan / atau RUN .

Perintah docker attach membolehkan anda melampirkan terminal anda ke bekas yang sedang berjalan. Ini berguna apabila anda mahu melihat apa yang ditulis dalam output standard dalam masa nyata, atau untuk mengawal proses secara interaktif.

Untuk lebih memahami bagaimana kerja perintah attach mari kita jalankan bekas Nginx yang terpisah menggunakan imej Nginx rasmi.

docker container run --name my_nginx -d -p 8080:80 nginx

Pilihan -p 8080:80 memberitahu Docker untuk mengikat pelabuhan 8080 bekas ke port 80 pada mesin tuan rumah.

Senaraikan bekas untuk memastikan bekas "my_nginx" sedang berjalan:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e1c4974a8d8 nginx "nginx -g 'daemon of…" 3 minutes ago Up 2 seconds 0.0.0.0:8080->80/tcp my_nginx

Lampirkan bekas dengan ID atau nama bekas:

docker container attach my_nginx

Perintah lalai dari imej nginx yang dijalankan apabila anda menjalankan bekas ditetapkan ke CMD . Apabila anda menjalankan perintah attach terminal anda melekat pada proses nginx .

Buka 127.0.0.1:8080 dalam pelayar anda dan anda boleh melihat output proses nginx dalam masa nyata.

192.168.33.1 - - "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-" 192.168.33.1 - - "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

Untuk mendapatkan akses kepada log bekas anda harus lebih suka menggunakan perintah docker logs .

Untuk melepaskan dari bekas tanpa hentikannya, gunakan kombinasi kekunci CTRL-p CTRL-q . Menekan CTRL-c menghentikan bekas.

Jika proses berjalan anda dilampirkan untuk menerima input, anda boleh menghantar arahan kepadanya.

Dapatkan Shell ke Container

Perintah docker exec membolehkan anda menjalankan perintah di dalam bekas yang sedang berjalan.

Untuk melihat bagaimana kerja perintah exec dan bagaimana ia boleh digunakan untuk memasuki shell kontena, pertama, mulakan bekas baru. Kami akan menggunakan imej MySQL rasmi:

docker container run --name my_mysql -d mysql

Ini akan mewujudkan sebuah bekas bernama "my_mysql".

Untuk melaksanakan arahan di dalam bekas, jalankan arahan berikut:

docker container exec -it my_mysql ls /var

Pilihan -i bermaksud interaktif, dan -t memberitahu Docker untuk memperuntukkan peranti TTY pseudo. Perintah ls akan menyenaraikan semua fail dan direktori di dalam direktori /var kontena:

backups cache lib local lock log mail opt run spool tmp

Untuk mendapatkan shell pada bekas iaitu, masukkan masuk ke dalam bekas, mulakan sesi shell baru dengan melaksanakan shell binari. Anda boleh menggunakan sh , bash , atau mana-mana shell lain yang dimasukkan ke dalam imej.

Perintah di bawah akan membuat sesi Bash baru di dalam bekas:

docker container exec -it my_mysql /bin/bash

Permintaan arahan anda akan berubah, menunjukkan bahawa anda sekarang sedang bekerja pada shell bekas.

Dari sini, anda boleh menjalankan arahan dengan cara yang sama seperti yang anda lakukan pada pelayan Linux yang lain. Sebagai contoh, untuk mendapatkan senarai pembolehubah persekitaran semasa jenis env :

env

Output akan kelihatan seperti ini:

HOSTNAME=e0214d97e0fe MYSQL_ROOT_PASSWORD=my-secret-pw PWD=/ HOME=/root MYSQL_MAJOR=8.0 GOSU_VERSION=1.7 MYSQL_VERSION=8.0.17-1debian9 TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env

Kesimpulannya

Pelaksana docker exec dan docker attach arahan membolehkan anda menyambung ke bekas yang sedang berjalan. Untuk mendapatkan shell interaktif pada bekas, gunakan arahan exec untuk memulakan sesi shell baru. Arahan attach melampirkan terminal anda ke bekas yang sedang berjalan.

docker