docker基础命令
1 docker镜像相关操作
1.1 搜索官方仓库镜像
[root@docker01 ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 3992 [OK]
ansible/centos7-ansible Ansible on Centos7 2 [OK]
列表说明
参数 说明NAME 镜像名称DESCRIPTION 镜像说明STARS 点赞数量OFFICIAL 是否是官方的AUTOMATED 是否是自动构建的
1.2 获取镜像
根据镜像名称拉取镜像
[root@docker01 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
af4b0a2388c6: Downloading 34.65MB/73.67MB
查看当前主机镜像列表
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
拉第三方镜像方法
docker pull index.tenxcloud.com/tenxcloud/httpd
1.3 导出镜像
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
# 导出
[root@docker01 ~]# docker image save centos > docker-centos.tar.gz
1.4 删除镜像
[root@docker01 ~]# docker image rm centos:latest
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 3f8a4339aadd 5 weeks ago 108MB
2 导入镜像
[root@docker01 ~]# docker image load -i docker-centos.tar.gz
e15afa4858b6: Loading layer 215.8MB/215.8MB
Loaded image: centos:latest
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
3 查看镜像的详细信息
[root@docker01 ~]# docker image inspect centos
--inspect命令
用于查看镜像和容器的详细信息,默认会列出全部信息
2 容器的日常管理
2.1 容器的起/停
最简单的运行一个容器
[root@docker01 ~]# docker run nginx
容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!
查看正在运行的容器
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8708e93fd767 nginx "nginx -g 'daemon of…" 6 seconds ago Up 4 seconds 80/tcp keen_lewin
查看你容器详细信息/ip
[root@docker01 ~]# docker container inspect 容器名称/id
查看你所有容器(包括未运行的)
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8708e93fd767 nginx "nginx -g 'daemon of…" 4 minutes ago Exited (0) 59 seconds ago keen_lewin
f9f3e6af7508 nginx "nginx -g 'daemon of…" 5 minutes ago Exited (0) 5 minutes ago optimistic_haibt
8d8f81da12b5 nginx "nginx -g 'daemon of…" 3 hours ago Exited (0) 3 hours ago lucid_bohr
停止容器
[root@docker01 ~]# docker stop 容器名称/id
或
[root@docker01 ~]# docker container kill 容器名称/id
2.2 进入容器方法
启动时进去方法
[root@docker01 ~]# docker run -it #参数:-it 可交互终端
[root@docker01 ~]# docker run -it nginx:latest /bin/bash
root@79241093859e:/#
退出/离开容器
1 ctrl+p & ctrl+q
启动后进入容器的方法
启动一个docker
[root@docker01 ~]# docker run -it centos:latest
[root@1bf0f43c4d2f /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:47 pts/0 00:00:00 /bin/bash
root 13 1 0 15:47 pts/0 00:00:00 ps -ef
--attach命令
docker attach命令进入容器,对应开发者很有用,可以连接到正在运行的容器,观察容器的运行状况,或与容器的主进程进行交互。
[root@docker01 ~]# docker attach 1bf0f43c4d2f
自命名启动一个容器 --name
[root@docker01 ~]# docker attach 1bf0f43c4d2f
exrc 进入容器方法(推荐使用)
[root@docker01 ~]# docker exec -it 容器id或者名称 /bin/bash
[root@b20fa75b4b40 /]# 重新分配一个终端
[root@b20fa75b4b40 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:11 pts/0 00:00:00 /bin/bash
root 13 0 0 16:14 pts/1 00:00:00 /bin/bash
root 26 13 0 16:14 pts/1 00:00:00 ps -ef
2.3 删除所有容器
[root@docker01 ~]# docker rm -f `docker ps -a -q`
# -f 强制删除
2.4 启动时进行端口映射
-p参数端口映射
[root@docker01 ~]# docker run -d -p 8888:80 nginx:latest
287bec5c602633c03e1fc5b0b8262fe76507be3dfae4ce5cd2ee2d1e8a89a9
不同指定映射方法
参数 说明-p hostPort:containerPort 端口映射 -p 8080:80-p ip:hostPort:containerPort 配置监听地址 -p 10.0.0.100:8080:80-p ip::containerPort 随机分配端口 -p 10.0.0.100::80-p hostPort:containerPort:udp 指定协议 -p 8080:80:tcp-p 81:80 –p 443:443 指定多个
随机映射
docker run -P (大P)# 需要镜像支持
3 Docker 数据卷的管理
把目录挂到docker中持久化 数据卷(文件或目录)
-v 卷名:/data
-v src(宿主机的目录):dst(容器的目录)
3.1 挂载宿主机目录到docker中
挂载卷
[root@docker01 ~]# docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest
079786c1e297b5c5031e7a8430c74e91ad065205043c60dbb78a259d09
容器内站点目录: /usr/share/nginx/html
在宿主机写入数据,查看
[root@docker01 ~]# echo "http://www.nmtui.com" >/data/index.html
[root@docker01 ~]# curl 10.0.0.100
http://www.nmtui.com
设置共享卷,使用同一个卷启动一个新的容器
[root@docker01 ~]# docker run -d -p 8080:80 -v /data:/usr/share/nginx/html nginx:latest
351f0bd78d273604bd0971b3979aa0f3cbf45247274493d2490527babb4e42
[root@docker01 ~]# curl 10.0.0.100:8080
http://www.nmtui.com
查看卷列表
[root@docker01 ~]# docker volume ls
DRIVER VOLUME NAME
3.2 创建卷后挂载
创建一个卷
[root@docker01 ~]# docker volume create
f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521
[root@docker01 ~]# docker volume ls
DRIVER VOLUME NAME
local f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521
指定卷名
[root@docker01 ~]# docker volume create smile
[root@docker01 ~]# docker volume ls
DRIVER VOLUME NAME
local smile
local f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521
查看卷详细路径
[root@docker01 ~]# docker volume inspect smile
[
{
"CreatedAt": "2018-02-01T00:39:25+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/smile/_data",
"Name": "smile",
"Options": {},
"Scope": "local"
}
]
使用卷创建
[root@docker01 ~]# docker run -d -p 9000:80 -v smile:/usr/share/nginx/html nginx:latest
1434559cff996162da7ce71820ed8f5937fb7c02113bbc84e965845c219d3503
# 宿主机测试
[root@docker01 ~]# echo 'blog.nmtui.com' >/var/lib/docker/volumes/smile/_data/index.html
[root@docker01 ~]# curl 10.0.0.100:9000
blog.nmtui.com
设置卷
[root@docker01 ~]# docker run -d -P --volumes-from 079786c1e297 nginx:latest
b54b9c9930b417ab3257c6e4a8280b54fae57043c0b76b9dc60b4788e92369fb
查看使用的端口
[root@docker01 ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1400/sshd
tcp 0 0 10.0.0.100:2375 0.0.0.0:* LISTEN 26218/dockerd
tcp6 0 0 :::9000 :::* LISTEN 32015/docker-proxy
tcp6 0 0 :::8080 :::* LISTEN 323/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 322/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 1400/sshd
tcp6 0 0 :::32769 :::* LISTEN 32300/docker-proxy
[root@docker01 ~]# curl 10.0.0.100:32769
http://www.nmtui.com
3.3 手动将容器保存为镜像
本次是基于docker官方centos 6.8 镜像创建
官方镜像列表:https://hub.docker.com/explore/
启动一个centos6.8的镜像
[root@docker01 ~]# docker pull centos:6.8
[root@docker01 ~]# docker run -it -p 1022:22 centos:6.8 /bin/bash
# 在容器种安装sshd服务,并修改系统密码
[root@582051b2b92b ~]# yum install openssh-server -y
[root@582051b2b92b ~]# echo "root:123456" |chpasswd
[root@582051b2b92b ~]# /etc/init.d/sshd start
启动完成后镜像ssh连接测试
将容器提交为镜像
[root@docker01 ~]# docker commit brave_mcclintock centos6-ssh
使用新的镜像启动容器
[root@docker01 ~]# docker run -d -p 1122:22 centos6-ssh:latest /usr/sbin/sshd -D
5b8161fda2a9f2c39c3c67e2eb9274977e7723fe51f08a0190217ae93094
在容器安装httpd服务
[root@5b8161fda2a9 /]# yum install httpd -y
编写启动脚本脚本
[root@5b8161fda2a9 /]# cat init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@5b8161fda2a9 /]# chmod +x init.sh
# 注意执行权限
再次提交为新的镜像
[root@docker01 ~]# docker commit 5b8161fda2a9 centos6-httpd
sha256:705d67a786cac040800b8485cf046fd57b1828b805c515377fc3e9cea3a481c1
启动镜像,做好端口映射。并在浏览器中测试访问
[root@docker01 ~]# docker run -d -p 1222:22 -p 80:80 centos6-httpd /init.sh
46fa6a06644e31701dc019fb3a8c3b6ef008d4c2c10d46662a97664f838d8c2c