正文

镜像:Docker 镜像是用于创建 Docker 容器的模板
容器:容器是独立运行的一个或一组应用
仓库:用来保存镜像,可以理解为代码控制中的代码仓库

一个仓库中包含多个镜像,以镜像为模板可创建出多个容器,每个容器是独立运行的一个或者一组应用。 容器是镜像的实例,镜像是容器的模板 。

简略:

容器生命周期:run、start/stop/restart、kill、rm、pause/unpause、create、exec

容器操作:ps、inspect、top、attach、events、logs、wait、export、port

容器rootfs:commit、cp、diff

镜像仓库:login/logout、pull、push、search

本地镜像管理:images、rmi、tag、build、history、save、import

info|version:info、version       【docker info/vaersion分别查看系统信息和版本信息】

一:容器

增:

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]  #创建一个新的容器但不启动它

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]  #创建一个新的容器并运行一个命令

 

进:

docker exec -ti <container name/id> #不会像attach方式因为退出,导致整个容器退出。          
docker attach  <container name/id> #进入虚拟机,如果从这个stdin中exit,会导致容器的停止。

开启/停止/重启

docker container  start/stop/restart   <hash> 

删:

docker container rm <hash> # 从此机器中移除指定的容器【删除容器时,容器必须是停止状态,否则会报如下错误】
docker container rm $(docker container ls -a -q) # 删除所有容器
docker container kill <hash> # 强制关闭指定的容器

查:

docker container ls # 列出所有运行的容器
docker container ls -a # 列出所有的容器

docker ps # 查看我们正在运行的容器
docker ps -l # 查询最后一次创建的容器
docker logs <container id> # 查看容器内的标准输出
docker logs <container name> # 查看容器内的标准输出


docker port <container name/id> <port> # 查看容器端口的映射情况

docker inspect <container id/name> #查看Docker的底层信息,它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息

二:镜像

增:

docker build -t friendlyname . # 使用此目录的“Dockerfile”创建镜像
docker push 192.168.1.52:5000/zabbix #提交镜像到本地私有
docker pull ubuntu:13.10 # 下载ubuntu:13.10镜像

删:

docker image rm <image id> # 从机器中移除指定镜像
docker image rm $(docker image ls -a -q) # 从机器上移除所有镜像

查:

docker image ls -a # 列出机器上所有镜像
docker search httpd # 通过 docker search 命令搜索 httpd 来寻找适合我们的镜像

运:

docker run httpd # 使用镜像仓库

#镜像标签
docker tag <image> username/repository:tag # 标签<image>上传到仓库【repository为镜像源名】
docker push username/repository:tag # 上传标记的图像到注册表
docker run username/repository:tag # 从注册表运行映像

三:其他

docker login # 使用您的Docker凭据登录此CLI会话
docker run -d -p 127.0.0.1:4000:80/udp friendlyname # 后台运行"friendlyname" 镜像并将4000 端口映射到80端口
# -P:将容器内部使用的网络端口映射到我们使用的主机上
# -d:让容器在后台运行
# 默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
docker run ubuntu:15.10 /bin/echo "Hello world" #Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
docker run -d -P --name runoob training/webapp python app.py #对容器镜像重新命名

 

 

关键字:

  • 镜像 images
  • 镜像名 image_name
  • 镜像id image_id
  • 容器 container
  • 容器名 con_name
  • 容器id con_id

从公网拉取一个镜像

docker pull images_name

查看已有的docker镜像

[root@docker ~]# docker images

查看帮助

docker command --help

查看镜像列表

docker search nginx

启动一个容器

#基于hello-world镜像启动一个容器,如果本地没有镜像会从公网拉取过来,这次做为测试用
docker run hello-world

导出镜像

docker save -o image_name.tar image_name

删除镜像

docker rmi image_name

启动一个容器

docker run --name=con_name images
--name  #设置容器名

基于创建好的容器自定义docker镜像

docker commit -m "con_name" con_id image_name

创建一个容器的同时进入这个容器

docker run -it --name=con_name images
-it     #在启动之后进入这个容器

创建一个容器,放入后台运行,把物理机80端口映射到容器的80端口

docker run -d -p 81:80 image_name
#-p 参数说明
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort
-p hostPort:containerPort:udp

看容器的端口映射情况

docker port con_id

查看正在运行的容器

docker ps 

查看所有的容器

docker ps -a

动态查看容器日志

docker logs -f con_name

进入容器

docker attach con_name

退出容器

# 方法一
exit
# 方法二
ctrl+p && ctrl+q (一起按,注意顺序,退出后容器依然保持启动状态)

删除容器

docker rm  con_name
#强制删除需要加-f,不加-f不能删除正在运行中的容器,非常危险,最好不用

查看docker网络

[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
3f91f2097286        bridge              bridge              local
d7675dbd247c        docker_gwbridge     bridge              local
5b36c7e947fd        host                host                local
ims6qkpikafu        ingress             overlay             swarm
85ba10e7ef79        none                null                local

创建一个docker网络my-docker

docker network create -d bridge \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.100 \
--ip-range=192.168.0.0/24 \
my-docker

利用刚才创建的网络启动一个容器

#docker run --network=my-docker --ip=192.168.0.5 -itd --name=con_name -h lb01 image_name
--network   #指定容器网络
--ip        #设定容器ip地址
-h          #给容器设置主机名

查看容器pid

#方法一:
docker top con_name

#方法二:
docker inspect --format "{{.State.Pid}}" con_name

运行dockerfile并给dockerfile创建的镜像建立名字

docker build -t mysql:3.6.34 `pwd`

mariadb容器启动前需先设置密码方法

docker run -d -P -e MYSQL_ROOT_PASSWORD=password  img_id

docker修改镜像名

docker tag imageid name:tag

进入docker容器脚本

[root@docker ~]# cat nsenter.sh 
PID=`docker inspect --format "{{.State.Pid}}" $1`
nsenter -t $PID -u --mount -i -n -p

创建一个网络

docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2

将容器添加到my_net2网络 connect

docker network connect my_net2 oldboy1
posted on 2019-03-11 10:52  黄衍仕  阅读(74)  评论(0编辑  收藏  举报