Docker系列文-----Docker三大核心概念以及實戰(nginx與MySQL)(2)
- Docker三大核心概念
- 一.鏡像(Image)
- 二.容器(Container)
- 三.倉庫(Repository)
- Docker的基本命令介紹
- 1.查看自己的docker版本
- 2.查看所有可以安裝的docker版本
- 3.查看自己的Docker行程是否運行
- 4.查找自己所需要的鏡像:
- 5.只下載鏡像,不開啟容器
- 6.查看自己有哪些鏡像
- 7.創建一個容器
- 8.啟動容器
- 9.查看正在運行的容器:
- 10.停止運行容器
- 11.重新開啟容器
- 12.徹底洗掉容器:
- 13.查看容器的日志
- 14.查看某個容器里的行程的行程
- 15.進入容器內部
- Nginx實戰
- 先體驗一下nginx能帶來的服務
- 1.yum install方式安裝nginx
- 2.開啟nginx服務并檢測
- 3.關閉防火墻和selinux,并且設定開機不要自啟
- 4.進入nginx存放網站首頁的目錄
- 5.測驗nginx服務 訪問自己虛擬機的ip
- Docker啟動nginx容器:
- 1.下載好nginx的鏡像檔案后啟動容器
- 2.查看nginx容器是否在運行
- 3.然后可以訪問192.168.2.21:8080 然后里面就是訪問docker的nginx的80埠
- MySQL實戰
- Ubuntu系統:
- 0.小技巧tips
- 1.下載mysql的image:(ubuntu)
- 2.確保本地的mysql服務關閉
- 3.啟動容器
- 4.連接測驗
- Centos8系統:
- 1.下載mysql鏡像:
- 2.啟動容器
- 3.訪問測驗
- 如果遇到Bug、Error~
- 小心得:
Docker三大核心概念
一.鏡像(Image)
鏡像是Docker運行容器的前提,Docker運行容器前需要本地存在對應的鏡像,如果鏡像不存在本地,Docker會嘗試先從默認鏡像倉庫下載(默認使用Docker Hub公共注冊服務器中的倉庫),用戶也可以通過配置,使用自定義的鏡像倉庫,
- Docker鏡像類似于虛擬機鏡像,可以將它理解為一個只讀的模板,
- 一個鏡像可以包含一個基本的作業系統環境,
- 官方的Docker Hub倉庫以及提供了數十萬個鏡像供大家開放下載,
Docker Hub網站
二.容器(Container)
Docker容器類似于一個輕量級的沙箱,Docker利用容器來運行和隔離應用,容器是從鏡像創建的應用運行的一個實體,可以將其創建、啟動、開始、停止、洗掉,而這些容器都是彼此互相隔離、互不可見的,
可以把容器看作是一個簡易版的Linux系統環境(包括root用戶權限、行程空間、用戶空間和網路空間等)以及運行在其中的應用程式打包而成的盒子,
三.倉庫(Repository)
Docker倉庫類似于代碼倉庫,它是Docker集中存放鏡像檔案的場所,
一個容易與之混淆的概念是注冊服務器(Registry),實際上注冊服務器是存放倉庫的具體服務器,每個服務器上可以有多個倉庫,而每個倉庫下面有多個鏡像,從這方面來說,倉庫可以被認為是一個具體的專案或目錄,例如對于倉庫地址dl.dockerpool.com/ubuntu來說,dl.dockerpool.com是注冊服務器地址,ubuntu是倉庫名,
Docker的基本命令介紹
1.查看自己的docker版本
[root@sc-docker ~]# docker -v
Docker version 20.10.8, build 3967b7d
2.查看所有可以安裝的docker版本
[root@sc-docker ~]# yum list docker-ce --showduplicates|sort -r
docker-ce.x86_64 3:20.10.8-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.8-3.el8 @docker-ce-stable
docker-ce.x86_64 3:20.10.7-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.3-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.1-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.0-3.el8 docker-ce-stable
docker-ce.x86_64 3:19.03.15-3.el8 docker-ce-stable
docker-ce.x86_64 3:19.03.14-3.el8 docker-ce-stable
docker-ce.x86_64 3:19.03.13-3.el8 docker-ce-stable
已安裝的軟體包
上次元資料過期檢查:0:36:19 前,執行于 2021年08月11日 星期三 10時19分27秒,
可安裝的軟體包
3.查看自己的Docker行程是否運行
[root@sc-docker ~]# ps aux|grep docker
root 12879 0.0 2.3 1517348 88696 ? Ssl 06:08 0:09 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 15775 0.0 0.0 12324 1044 pts/0 S+ 10:58 0:00 grep --color=auto docker
dockerd:docker deamon—》docker守護行程:一直在運行的,對外提供服務的
4.查找自己所需要的鏡像:
第一個顯示的一定是官方庫,STARS越多收藏的次數越多,有部分是個人或者企業鏡像,個人也能夠提交鏡像至倉庫
[root@sc-docker web]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 15288 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2058 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 815 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 228
linuxserver/nginx An Nginx container, brought to you by LinuxS… 150
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 138 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 130 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 105 [OK]
nginxdemos/hello NGINX webserver that serves a simple page co… 70 [OK]
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 56 [OK]
nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… 55
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 46
staticfloat/nginx-certbot Opinionated setup for automatic TLS certs lo… 24 [OK]
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN… 19
schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 19 [OK]
centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 15
centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 13
flashspys/nginx-static Super Lightweight Nginx Image 10 [OK]
mailu/nginx Mailu nginx frontend 9 [OK]
navidonskis/nginx-php5.6 Docker nginx + php5.6 on Ubuntu 7 [OK]
devilbox/nginx-stable Devilbox's Nginx stable (based on official N… 4
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 2 [OK]
wodby/nginx Generic nginx 1 [OK]
arnau/nginx-gate Docker image with Nginx with Lua enabled on … 1 [OK]
centos/nginx-110-centos7 Platform for running nginx 1.10 or building … 0
5.只下載鏡像,不開啟容器
pull 從別人那里拉取下來----》下載
push 推上去—》上傳
[root@sc-docker web]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
33847f680f63: Already exists
5cb67864e624: Pull complete
1a2b594783f5: Pull complete
b30e406dd925: Pull complete
48901e306e4c: Pull complete
603d2b7147fd: Pull complete
802aa684c1c4: Pull complete
715d3c143a06: Pull complete
6978e1b7a511: Pull complete
f0d78b0ac1be: Pull complete
35a94d251ed1: Pull complete
36f75719b1a9: Pull complete
Digest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
上面默認下載最新版的MySQL,可以下載指定版本的MySQL------>mysql:tag
[root@sc-docker web]# docker pull mysql:5.7.35
6.查看自己有哪些鏡像
[root@sc-docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 5 months ago 13.3kB
centos latest 300e315adb2f 8 months ago 209MB
7.創建一個容器
注意 :create不能接-d 因為只是創建容器沒有run,-d表示行程,此時行程并沒有啟動
創建一個容器 不啟動
[root@sc-docker web]# docker create --name sc-nginx-cali-6 -p 8088:80 nginx
ff959e6e08bcd17adc230220dd6ccf5e3180a5d92dffb1ea9ccf261a1c867ccb
8.啟動容器
可以理解為:docker run = docker create + docker start
簡單版:
docker run --name sc-nginx-1 -d -p 8081:80 nginx
復雜版:
docker run --name sc-nginx-1 -v /web:/usr/share/nginx/html:ro -d -p 8080:80 daocloud.io/nginx
1.–name sc-nginx-1 指定容器的名字
2.-v引數中,冒號":"前面的目錄是宿主機目錄,后面的目錄是容器內目錄(掛載)
-v /web:/usr/share/nginx/html:ro 資料卷:可以實作宿主機和容器直接的資料共享
/web 是宿主機的目錄
/usr/share/nginx/html 是容器里的系統的目錄的路徑
ro 只讀
3.-d 在后臺啟動一個容器行程 deamon
4.-p 埠的映射:iptables的DNAT 8080:80 訪問宿主機的8080埠,轉發到容器里的80埠
8080:80:訪問宿主的8080埠可以轉接到容器的80埠
發布:將容器的服務發布到外界
原理:dnat
5.daocloud.io/nginx 到daocloud.io網站去下載nginx的鏡像
點擊進入daocolud官網
9.查看正在運行的容器:
[root@sc-docker web]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bd4455d581a daocloud.io/nginx "/docker-entrypoint.…" 3 hours ago Up 3 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp sc-nginx-4
接-a選項查看更全的資訊 而且可以顯示沒有在Up狀態的容器
[root@sc-docker web]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bd4455d581a daocloud.io/nginx "/docker-entrypoint.…" 3 hours ago Up 3 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp sc-nginx-4
7317d5762013 centos "/bin/bash" 13 hours ago Exited (0) 3 hours ago
10.停止運行容器
[root@sc-docker web]# docker stop sc-nginx-4
sc-nginx-4
11.重新開啟容器
[root@sc-docker web]# docker start sc-nginx-4
sc-nginx-4
12.徹底洗掉容器:
一個容器正在運行的時候不能夠直接洗掉,必須stop之后才能洗掉
[root@sc-docker web]# docker rm sc-nginx-4
Error response from daemon: You cannot remove a running container 1bd4455d581a8db0258dde45e8b9db0eed38bb6071a563a2897bfa5466beb681. Stop the container before attempting removal or force remove
如下圖所示這樣為洗掉成功(確認結果可以用docker ps -a查看)
[root@sc-docker web]# docker rm sc-nginx-4
sc-nginx-4
13.查看容器的日志
docker logs +容器名
[root@sc-docker web]# docker logs sc-nginx-cali-1
14.查看某個容器里的行程的行程
docker top +容器名
[root@sc-docker web]# docker top sc-nginx-cali-1
UID PID PPID C STIME TTY TIME CMD
root 21414 21394 0 15:57 ? 00:00:00 nginx: master process nginx -g daemon off;
101 21462 21414 0 15:57 ? 00:00:00 nginx: worker process
15.進入容器內部
-i --interactive(相互作用的) 可以互動-t 創建一個終端
-it 一般一起使用
進入容器內部運行/bin/bash這個命令
[root@sc-docker web]# docker exec -it sc-nginx-cali-1 /bin/bash
root@e24c5644f935:/# hostname
e24c5644f935
Nginx實戰
nginx是一個web服務器軟體,搭建一個自己的網站(靜態)
先體驗一下nginx能帶來的服務
1.yum install方式安裝nginx
[root@sc-docker ~]# yum install nginx -y
2.開啟nginx服務并檢測
[root@sc-docker ~]# ss -anplut|grep nginx
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=18114,fd=8),("nginx",pid=18113,fd=8),("nginx",pid=18112,fd=8))
tcp LISTEN 0 128 [::]:80 [::]:* users:(("nginx",pid=18114,fd=9),("nginx",pid=18113,fd=9),("nginx",pid=18112,fd=9))
[root@sc-docker ~]# systemctl start nginx
[root@sc-docker ~]# ps aux|grep nginx
root 18112 0.0 0.0 119156 2192 ? Ss 11:26 0:00 nginx: master process /usr/sbin/nginx
nginx 18113 0.0 0.2 151804 7972 ? S 11:26 0:00 nginx: worker process
nginx 18114 0.0 0.2 151804 7972 ? S 11:26 0:00 nginx: worker process
root 18116 0.0 0.0 12324 972 pts/0 S+ 11:26 0:00 grep --color=auto nginx
3.關閉防火墻和selinux,并且設定開機不要自啟
[root@sc-docker ~]# setenforce 0
[root@sc-docker ~]# systemctl stop firewalld
[root@sc-docker ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@sc-docker ~]# vim /etc/selinux/config
----------------------------------------------------
將SELINUX=enforce
修改為disabled 重啟后永久生效
4.進入nginx存放網站首頁的目錄
[root@sc-docker ~]# cd /usr/share/nginx/html/
index.html ---》首頁---》打開網站看到的第一個頁面
[root@sc-docker html]# vim index.html
--------------------------------------
可以用html語言修改這個頁面 修改完什么樣子之后訪問此ip地址的80埠首頁就是什么樣子
5.測驗nginx服務 訪問自己虛擬機的ip
在瀏覽器中輸入自己的ip地址:80

Docker啟動nginx容器:
1.下載好nginx的鏡像檔案后啟動容器
docker run --name sc-nginx-2 -v /web:/usr/share/nginx/html:ro -d -p 8080:80 daocloud.io/nginx
c74a86eedfce131dc2374161b101b5d98d5f60cde939d28ec012af6933af8fcc
2.查看nginx容器是否在運行
[root@sc-docker html]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c74a86eedfce daocloud.io/nginx "/docker-entrypoint.…" 10 seconds ago Up 6 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp sc-nginx-2
[root@sc-docker html]# ss -anplut|grep 8080
tcp LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("docker-proxy",pid=19021,fd=4))
tcp LISTEN 0 128 [::]:8080 [::]:* users:(("docker-proxy",pid=19027,fd=4))
3.然后可以訪問192.168.2.21:8080 然后里面就是訪問docker的nginx的80埠
訪問的是主機的/web檔案 映射到docker容器的nginx下的/usr/share/nginx/html檔案
如圖即為成功(圖上是8088埠,此例子訪問8080埠即可)

MySQL實戰
前提:(確保系統中都存在MySQL服務器)
centos:
yum install mariadb mariadb-server
mariadb 是客戶端的軟體包
ubuntu:
xiaoxiong@root:~$ sudo apt install mariadb-server
mariadb-server:提供mysql資料庫的服務
Ubuntu系統:
0.小技巧tips
在Ubuntu中重新使用root用戶,可以省去繁瑣的sudo操作:
root@root:/home/xiaoxiong# sudo passwd root
New password:
Retype new password:
passwd: password updated successfully
root@root:/home/xiaoxiong# su - root
1.下載mysql的image:(ubuntu)
xiaoxiong@root:~$ sudo docker pull mysql:5.7.35
2.確保本地的mysql服務關閉
service stop mysql
3.啟動容器
docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD=‘sanchuang123’ -d mysql:5.7.35 -P 3306:3306
–name:指定容器的容器名
-e :指定環境變數 MYSQL_ROOT_PASSWORD的環境變數
-d:守護行程 deamon
mysql:tag ---->tag用來指定mysql的版本
-P:埠映射 從本機的3306埠映射到docker里的3306埠
root@root:/home/xiaoxiong# docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD='sanchuang123' -d -p 3306:3306 mysql:5.7.35
9c0d35a1a1585f6358905d86f922206179231f9aea092f54d848a03fcfcdc98b
4.連接測驗
root@root:/home/xiaoxiong# mysql -uroot -psanchuang123 -h 192.168.63.147 -P 3306
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.35 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
- 測驗成功
Centos8系統:
1.下載mysql鏡像:
docker pull mysql:5.7.35
2.啟動容器
docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD=‘sanchuang123’ -d -p 3306:3306 mysql:5.7.35
[root@sc-docker html]# docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD='sanchuang123' -d -p 3306:3306 mysql:5.7.35
1468f427a37bc37792f656cfb08aa46605526330e31e5027a6c50a4e79658342
[root@sc-docker html]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1468f427a37b mysql:5.7.35 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp sc-mysql-1
3.訪問測驗
可以是其他服務器(使用另一臺虛擬機來訪問)
-h 指定連接服務器的ip地址
[root@sc-docker html]# mysql -h 192.168.2.21 -uroot -p'sanchuang123'
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
如果遇到Bug、Error~
在上述命令都沒有錯誤的情況下:
如果訪問不進去,報錯
ERROR 2002 (HY000): Can't connect to MySQL server on '192.168.63.147' (115)
重啟一下docker的服務再docker start剛剛的容器 80%能夠修復
service docker restart
小心得:
不論是在Centos還是Ubuntu系統中,ps aux|grep mysql這個命令是可以捕捉到你使用docker容器創建的mysqld行程的
但是需要注意:
root@root:~# ps aux|grep mysql
systemd+ 34414 0.0 9.8 1377300 197804 ? Ssl 09:50 0:06 mysqld
mysql 38050 8.0 3.8 1710584 77356 ? Ssl 11:56 0:00 /usr/sbin/mysqld
root 38134 0.0 0.0 6432 736 pts/0 S+ 11:56 0:00 grep --color=auto mysql
如上圖所示
- root 執行的是grep命令 不計入真正的MySQL服務
- mysql執行的是本地(虛擬機)的MySQL服務
- 而systemd+執行的則是虛擬機產生的MySQL服務
在Docker服務啟動的時候,雖然你的防火墻是關閉的,但是Docker服務會往你的防火墻規則(Iptables)里寫入一些規則,這時候不要重啟防火墻,否則后面的操作會報錯,如果報錯,需要清除防火墻規則,然后重啟Docker服務則可以解決問題

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/293327.html
標籤:其他
