鏡像命令
docker images
-
docker images
: 查看本地的所有鏡像 - 后面可以跟的常用參數(shù)有 :
-a : 列出所有的鏡像
-
-q : 只顯示鏡像 id
REPOSITORY : 鏡像的倉庫源
TAG : 鏡像的標(biāo)簽
TMAGE ID : 鏡像的 id
CREATED : 鏡像的創(chuàng)建時(shí)間
SIZE : 鏡像的大小
docker search
-
docker search
: 搜索鏡像 -
docker search mysql --filter=STARS=3000
: 搜索 MySQL 鏡像 stars 超過 3000 的鏡像
docker pull
-
docker pull 鏡像名稱:[tag版本]
: 下載鏡像, 默認(rèn)下載最新版
docker rmi
-
docker rmi -f 鏡像id
: 刪除指定鏡像, 如果要?jiǎng)h除多個(gè)鏡像, 則每個(gè)鏡像 id 之間用空格隔開 -
docker rmi -f $(docker images -aq)
: 刪除所有的鏡像
容器命令
- 有了鏡像后才可以創(chuàng)建容器
新建容器并啟動
docker run [可選參數(shù)] 鏡像id
-
參數(shù):
- --name="容器名稱"
- -d : 以后臺方式運(yùn)行
- -it : 進(jìn)入到容器內(nèi)部, 常用的是:
docker run -it centos /bin/bash
- -p : 指定容器端口
- -p ip:主機(jī)端口:容器端口
- -p 主機(jī)端口:容器端口
- -p 容器端口
- 容器端口
- -P : 隨機(jī)指定端口
- -e : 環(huán)境配置, 如配置 MySQL 密碼
退出容器
exit
: 退出并關(guān)閉容器command + p + q
: 退出但是不關(guān)閉容器
查看正在運(yùn)行中的容器
docker ps
-
docker ps -a
: 查看正在運(yùn)行的容器和曾經(jīng)運(yùn)行過的容器 -
docker ps -n=3
: 顯示最近新建的 3 個(gè)容器 -
docker ps -q
: 只顯示容器的編號
刪除容器
-
docker rm 容器id
: 刪除指定的容器, 不能刪除正在運(yùn)行的容器, 如果想要?jiǎng)h除正在運(yùn)行的, 可以使用 rm -f -
docker rm -f $(docker ps -aq)
: 刪除所有的容器 -
docker ps -a -q|xargs docker rm
: 刪除所有的容器
啟動容器
docker start 容器id
重啟容器
docker restart 容器id
停止正在運(yùn)行的容器
docker stop 容器id
強(qiáng)制停止正在運(yùn)行的容器
docker kill 容器id
其他常用命令
澈醒樱看日志
docker logs -tf 容器id
: 查看指定容器的日志docker logs -tf --tail 10 容器id
: 查看指定容器的最近 10 條的日志
查看容器的進(jìn)程信息
docker top 容器id
查看鏡像的元數(shù)據(jù)
docker inspect 鏡像id
進(jìn)入當(dāng)前正在運(yùn)行的容器
-
docker exec -it 容器id /bin/bash
: 進(jìn)入容器后新開啟一個(gè)終端, 可以在里面進(jìn)行一些操作 (常用) -
docker attach 容器id
: 進(jìn)入當(dāng)前正在執(zhí)行的終端
從容器內(nèi)拷貝文件到主機(jī)上
docker cp 容器id:容器內(nèi)路徑 目的主機(jī)路徑
查看 CPU 狀態(tài)
docker stats
增加 tag
docker tag 鏡像id 鏡像名稱:版本號
commit 鏡像
docker commit -m='提交的描述信息' -a='作者' 容器id 目標(biāo)鏡像名:[版本]
數(shù)據(jù)卷
查看所有的數(shù)據(jù)卷
docker volume ls
- 可以使用
docker inspect 容器id
來查看是否掛載成功, 在顯示的信息中查看 Mounts 部分的內(nèi)容
指定路徑掛載
docker run -it -v 主機(jī)目錄:容器內(nèi)目錄 鏡像名稱 /bin/bash
匿名掛載
docker run -it -v 容器內(nèi)目錄 鏡像名稱
具名掛載
大多數(shù)情況下都使用的是具名掛載
docker run -it -v 隨便起的名字:容器內(nèi)目錄 鏡像名稱
docker run -it -v 隨便起的名字:容器內(nèi)目錄:ro 鏡像名稱
: 其中 ro 表示的是只能讀, read only, 表示的是不能在容器內(nèi)部進(jìn)行修改, 只能通過宿主機(jī)來修改docker run -it -v 隨便起的名字:容器內(nèi)目錄:rw 鏡像名稱
: 其中 rw 表示的是可讀可寫, read write (默認(rèn)的)
使用 dockerfile 來掛載
-
案例:
touch dockerfile
-
vim dockerfile
FROM centos VOLUME ['volume01', 'volume02'] CMD echo '====end======' CMD /bin/bash
-
docker build -f dockerfile -t xiaosheng/centos .
- -f : 表示 dockerfile 文件的路徑
- -t : 表示要生成的鏡像名稱
- . : 表示要生成在哪個(gè)目錄下
最后可以使用
docker inspect 鏡像id
來查看數(shù)據(jù)卷的詳細(xì)信息
查看指定數(shù)據(jù)卷對應(yīng)的目錄
docker volume inspect 具名掛載時(shí)起的名字
- 當(dāng)掛載數(shù)據(jù)卷并且沒有指定路徑的時(shí)候,
Linux
中一般都是掛載在/var/lib/docker/volume
目錄中
配置 MySQL
docker run -d -p 3306:3306 -v /home/mysql/my.conf:/etc/mysql/my.conf -v /home/mysql/data:/use/local/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
- -e 可以用來配置 MySQL 密碼, 可以同時(shí)掛載多個(gè)數(shù)據(jù)卷
數(shù)據(jù)卷容器
可以在多個(gè)容器之間共享數(shù)據(jù)
-
案例
先開啟一個(gè) nginx01 的容器
-
然后需要再開啟一個(gè) nginx02 的容器, 同時(shí)這兩個(gè)容器之間需要數(shù)據(jù)共享, 那就在開啟 nginx02 的時(shí)候就可以使用以下命令:
docker run -it --name nginx02 --volumes-from nginx01 xiaosheng/centos
同時(shí)還可以有其他的容器來和 nginx01 一起共享數(shù)據(jù)
即便 nginx01 容器關(guān)掉或者銷毀, 并不會影響到其他容器中共享的數(shù)據(jù)
只要還有一個(gè)容器在使用, 那么數(shù)據(jù)就不會消失
Dockerfile
- dockerfile 是用來構(gòu)建 docker 鏡像的文件
步驟 :
- 編寫 dockerfile 文件
- docker build 構(gòu)建成為一個(gè)鏡像
- docker run 運(yùn)行鏡像
- docker push 發(fā)布鏡像 (可以發(fā)布到 dockerhub 或者是 阿里云鏡像倉庫)
dockerfile 文件
每一個(gè)保留關(guān)鍵字 (指令) 都必須是大寫
從上往下開始執(zhí)行
# 表示注釋
每一個(gè)指令都會創(chuàng)建一個(gè)鏡像層
-
常用指令:
FROM # 基礎(chǔ)鏡像 MAINTAINER # 鏡像作者, 一般是姓名<郵箱> RUN # 構(gòu)建鏡像的時(shí)候需要運(yùn)行的命令 ADD # 構(gòu)建鏡像的時(shí)候, 需要添加的內(nèi)容, 比如要在 centos 鏡像中添加一個(gè) NGINX, 如果添加的是一個(gè)壓縮包的話, 會自動解壓 WORKDIR # 鏡像的工作目錄 VOLUME # 掛載的目錄 EXPOSE # 端口配置 CMD # 容器啟動的時(shí)候需要運(yùn)行的命令, 只有最后一個(gè)會生效, 這個(gè)最后一個(gè)生效, 并不是指在 dockerfile 文件中, 在 dockerfile 文件中仍然可以有多個(gè) CMD 命令, 指的是在使用 docker run 的時(shí)候, 后面不能加命令, 如果加了, 那么 docker run 后面的命令將會替換掉 dockerfile 文件中的命令 ENTRYPOINT # 容器啟動的時(shí)候需要運(yùn)行的命令, 可以追加命令 ONBUILD # 當(dāng)構(gòu)建一個(gè)被繼承的 dockerfile 的時(shí)候, 會運(yùn)行 ONBUILD 指令 COPY # 將文件拷貝到鏡像中 ENV # 構(gòu)建的時(shí)候設(shè)置環(huán)境變量
-
案例 (嘗試構(gòu)建自己的 centos)
-
編寫 dockerfile 文件
FROM centos # 基礎(chǔ)鏡像是 centos MAINTAINER xiaosheng<1029739052@qq.com> # 作者信息 ENV MYPATH /usr/local # 自定義一個(gè)變量 MYPATH, 值是 /usr/local WORKDIR $MYPATH # 指定工作目錄, 即用戶當(dāng)進(jìn)去 centos 后所在的目錄 RUN yum -y install vim # 安裝 vim RUN yum -y install net-tools # 安裝 net-tools EXPOSE 80 # 暴露端口 CMD echo $MYPATH CMD echo "===end====" CMD /bin/bash
-
開始構(gòu)建
docker build -f dockerfile文件的地址 -t 鏡像名:[版本號]
使用
docker history 鏡像id
來查看鏡像的構(gòu)建歷史
-
發(fā)布鏡像
發(fā)布到 dockerhub
- 注冊一個(gè) dockerhub 的賬號
-
docker login -u 用戶名
, 然后輸入密碼 docker push 用戶名(隨便起的)/鏡像名:版本號
發(fā)布到阿里云
可以先將 docker 的鏡像更換成自己的阿里云中提供的鏡像地址
登錄阿里云, 進(jìn)入容器鏡像
創(chuàng)建命名空間和鏡像倉庫, 創(chuàng)建倉庫的時(shí)候選擇本地倉庫