=======================
docker 基礎(chǔ)鏡像環(huán)境 alpine
=======================
可以使用 docker search 命令搜索指定的 image, 或者訪(fǎng)問(wèn)網(wǎng)址 https://hub.docker.com/explore/
在hub官網(wǎng)會(huì)經(jīng)常能看到 alpine 字樣, alpine 是要給非常輕量級(jí)的Linux發(fā)行版,Docker官方已經(jīng)推薦使用alpine 代替之前的 Ubuntu作為基礎(chǔ)鏡像環(huán)境, 好處是制作出的最終鏡像文件很多, 但docker dub上目前仍以 Ubuntu 為主流的基礎(chǔ)鏡像環(huán)境.
下面是幾個(gè)常用發(fā)行版基礎(chǔ)鏡像的大小.
REPOSITORY TAG IMAGE ID VIRTUAL SIZE
alpine latest 4e38e38c8ce0 4.799 MB
debian latest 4d6ce913b130 84.98 MB
ubuntu latest b39b81afc8ca 188.3 MB
centos latest 8efe422e6104 210 MB
alpine 內(nèi)置 apk 包管理器, 而不是Ubuntu的apt, alpine 包的網(wǎng)址是 https://pkgs.alpinelinux.org/packages
=======================
常用 docker images
=======================
可以使用 docker search 命令搜索指定的 image, 或者訪(fǎng)問(wèn)網(wǎng)址 https://hub.docker.com/explore/
docker pull openjdk:8-alpine # 大小為107.8MB
docker pull openjdk:8 # 大小為309MB
docker pull nginx
docker pull tomcat
docker pull wnameless/oracle-xe-11g
docker pull python
docker pull mysql
docker pull mongo
docker pull redis
docker pull rabbitmq
docker pull rabbitmq:3-management
=======================
用于 docker 命令學(xué)習(xí)的鏡像和命令
=======================
下面鏡像常用于 docker 命令學(xué)習(xí)
docker pull nginx:1.15-alpine #只需要20M的空間
docker pull busybox #只占用2M空間
以守護(hù)態(tài)運(yùn)行容器, 經(jīng)常用于容器的學(xué)習(xí).
docker run -d --name mybusybox busybox /bin/sh -c "while true; do echo hello world; sleep 1; done"
使用鏡像nginx:1.15-alpine以后臺(tái)模式啟動(dòng)一個(gè)容器, 并將容器的80端口映射到主機(jī)隨機(jī)端口(80是該鏡像expose的端口)
docker run -P -d --name mynginx1 nginx:1.15-alpine
使用鏡像nginx:1.15-alpine以后臺(tái)模式啟動(dòng)一個(gè)容器, 指定主機(jī)的端口為 80
docker run -p 80:80 -d --name mynginx2 nginx:1.15-alpine
=======================
docker 容器端口映射
=======================
指定host端口和容器內(nèi)端口
使用鏡像nginx:1.15-alpine以后臺(tái)模式啟動(dòng)一個(gè)容器, 指定主機(jī)的端口為80, 冒號(hào)前的host端口, 冒號(hào)后為容器內(nèi)部的端口.
docker run -p 80:80 -d --name mynginx2 nginx:1.15-alpine容器內(nèi)端口隨機(jī)分配一個(gè)Host端口
下面 -p 參數(shù)的 80 指的是容器內(nèi)部的端口, 沒(méi)有指定host端口, docker在主機(jī)上自動(dòng)開(kāi)放一個(gè)映射端口(當(dāng)然是未被占用的), 自動(dòng)端口號(hào)一般大于等于 32768 .
docker run -p 80 -d --name mynginx2 nginx:1.15-alpine自動(dòng)為所有的 Dockerfile EXPOSE 端口映射Host端口
Dockerfile EXPOSE 可能會(huì)開(kāi)放多個(gè)端口, 使用 -P 參數(shù)將自動(dòng)為這些容器內(nèi)部端口分配對(duì)應(yīng)的Host主機(jī)端口
docker run -P -d --name mynginx1 nginx:1.15-alpine
=======================
docker 的一些常用命令
=======================
docker images 命令, 顯示可用的容器
docker rmi <鏡像Id> 命令,刪除指定鏡像
docker pull hello-world 命令 , 下載 hello-world image
docker rmi <鏡像Id> 命令,刪除指定鏡像
docker ps 命令, 列出當(dāng)前正在運(yùn)行的容器, 結(jié)果的第一列是container_Id, 第2列是容器名稱(chēng).
docker ps -a 命令, 列出當(dāng)前正在運(yùn)行的和之前運(yùn)行完的容器
docker stop container_id/container-name 命令, 停止指定的容器, 該容器Id或名稱(chēng)可以從docker ps中獲取.
docker restart container_id/container-name 命令, 重新啟動(dòng)指定的容器, 該容器Id或名稱(chēng)可以從docker ps中獲取.
docker start container_id/container-name 命令, 啟動(dòng)指定的容器, 該容器Id或名稱(chēng)可以從docker ps中獲取.
docker rm container_id/container-name, 刪除指定的容器
docker rm $(docker ps -a -q) 命令, 刪除所有運(yùn)行結(jié)束了容器, 正在運(yùn)行的容器不會(huì)被刪除
docker top container_id/container-name, 查看容器內(nèi)的進(jìn)程
docker logs [-f] [-t] [--tail string] 容器名, 查看容器的日志輸出, -f是打開(kāi)跟蹤, -t是加上時(shí)間戳, --tail 100 表示僅顯示最后的100行日志
docker search nginx, 在hub站點(diǎn)中搜索 nginx 鏡像
docker image inspect image_id 命令, 顯示指定鏡像的詳細(xì)信息.
docker container inspect container_id/container-name 命令, 顯示指定容器的詳細(xì)信息,包括容器的Ip
docker images -f dangling=true 命令, 列出沒(méi)有被容器化的鏡像
docker rmi $(docker images -qf dangling=true) 命令, 刪除那些沒(méi)有被容器化的鏡像
docker system df 命令, 可以一次性查看鏡像/容器/host volume的磁盤(pán)占用情況.
docker ps -s 命令, 輸出容器的空間占用
=======================
docker 一些管理命令集
=======================
除了上面常用的命令外, docker 還有一些管理命令集, 這些命令集還可以包含二級(jí)命令:
config Manage Docker configs
container Manage containers
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
比較常用的是,
docker image build, 編譯 Dockfile
docker network create, 創(chuàng)建 docker 網(wǎng)絡(luò)
docker volume create, 創(chuàng)建數(shù)據(jù)卷
=======================
docker run/exec 命令
=======================
運(yùn)行 hello-world 容器, 如果本地沒(méi)有下載, 將會(huì)自動(dòng)從hub站點(diǎn)下載.
docker run hello-world 命令
以守護(hù)態(tài)運(yùn)行容器
docker run -d --name mybusybox busybox /bin/sh -c "while true; do echo hello world; sleep 1; done"
登陸一個(gè)容器, 運(yùn)行中的容器其實(shí)是一個(gè)功能完備的Linux操作系統(tǒng), 所以我們可以在登陸該容器執(zhí)行常規(guī)的Linux命令.
docker exec -it container_id/container-name /bin/bash
使用 redis-cli 登陸 myredis 容器
docker exec -it myredis redis-cli
exec 后的 -it 參數(shù)的意思是, 以交互的方式并分配一個(gè)偽tty, 經(jīng)常一起聯(lián)用.
=======================
docker redis 使用
=======================
下載最新版的 redis image
docker pull redis:latest
簡(jiǎn)單方式啟動(dòng) redis 服務(wù)
pull run redis
下面命令摘自: https://blog.csdn.net/cookily_liangzai/article/details/80726163
docker run --name redis-test -p 6379:6379 -d --restart=always redis:latest redis-server --appendonly yes --requirepass "your passwd"
--name redis-test: 為容器指定名稱(chēng)為 redis-test
-p 6379:6379 :將容器內(nèi)端口映射到宿主機(jī)端口(容器端口在右邊, 宿主端口在左邊)
-d: 即 --detach, 以后臺(tái)的方式執(zhí)行容器
–restart=always: 隨docker啟動(dòng)而啟動(dòng)
redis-server –appendonly yes: 在容器執(zhí)行redis-server啟動(dòng)命令, 并打開(kāi)redis持久化配置
requirepass "your passwd" : 設(shè)置redis認(rèn)證密碼
下面命令摘自: http://www.cnblogs.com/cgpei/p/7151612.html
# docker run -p 6699:6379 --name myredis -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d redis:3.2 redis-server /etc/redis/redis.conf --appendonly yes
命令說(shuō)明:
--name myredis : 指定容器名稱(chēng),這個(gè)最好加上,不然在看docker進(jìn)程的時(shí)候會(huì)很尷尬。
-p 6699:6379 : 端口映射,默認(rèn)redis啟動(dòng)的是6379,至于外部端口,隨便玩吧,不沖突就行。
-v $PWD/redis.conf:/etc/redis/redis.conf : 將主機(jī)中當(dāng)前目錄下的redis.conf配置文件映射。
-v $PWD/data:/data -d redis:3.2 : 將主機(jī)中當(dāng)前目錄下的data掛載到容器的/data
--redis-server --appendonly yes :在容器執(zhí)行redis-server啟動(dòng)命令,并打開(kāi)redis持久化配置\
注意事項(xiàng):
如果不需要指定配置,-v $PWD/redis.conf:/etc/redis/redis.conf 可以不用 ,
redis-server 后面的那段 /etc/redis/redis.conf 也可以不用。
=======================
MySQL 官方Docker鏡像的使用
=======================
摘自 https://itbilu.com/linux/docker/EyP7QP86M.html
docker run --name itbilu-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-pass -d mysql:5.7
我們就創(chuàng)建了一個(gè)名為 itbilu-mysql 的MySQL數(shù)據(jù)庫(kù)服務(wù)器容器實(shí)例, 在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),通過(guò)環(huán)境變量MYSQL_ROOT_PASSWORD設(shè)置數(shù)據(jù)庫(kù)的root密碼,還通過(guò)5.7標(biāo)簽指定了所使用的鏡像版本。
不使用cnf文件的配置方式, 啟動(dòng)一個(gè)MySQL服務(wù)器容器,并使用UTF-8(utf8mb4)格式的表編碼:
docker run --name itbilu-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-pw -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
使用宿主機(jī)/my/cnf/my.cnf 配置文件,這時(shí)就可以通過(guò)以下方式啟動(dòng)MySQL容器
docker run --name itbilu-mysql -p 3306:3306 -v /my/cnf/:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=my-pass -d mysql:5.7
指定MySQL數(shù)據(jù)目錄的volume
docker run --name itbilu-mysql -p 3306:3306 -v /my/datadir:/var/lib/mysql -v /my/cnf/:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=my-pw -d mysql:5.7