【docker专题(4)】操作示例

生产中一般都是通过dockerfile来创建容器和docker-compose来链接容器

一般操作流程

# 启动docker
systemctl start docker
systemctl status docker

# 先去仓库拿到镜像
docker search ubuntu
docker pull ubuntu
docker images

# 运行镜像容器 -dit 没有d就直接进入
docker run --name myubuntu -dit ubuntu /bin/bash

# 查看启动镜像 , -a是显示所有 (默认是只显示运行的)
docker ps -a

# 启动容器
# 如果启动不了的,在运行时docker run -dit ubuntu
docker start myubuntu

# 进入容器 (别用attach进入,因为如果再开一个窗口就会同步操作,类似于单用户模式远程操作)
docker exec -i -t myubuntu /bin/bash

# 查看容器信息
docker inspect ac11f587f8c7
docker inspect ac11f587f8c7 | grep IPAddress | cut -d '"' -f 4  # 获得ip
docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' id   # 获取端口映射
docker inspect -f "{{ .State.Pid }}" ac11f587f8c7 # 获得pid

# 导出容器 docker save -o [自定义镜像包名称] [镜像]
docker save -o myubuntu2.tar ubuntu

# 停止容器
docker stop container_id

# 删除容器 (删除之前要先停止)
docker rm myubuntu

# 删除镜像
docker rmi image_id # 或者image_name

# 导入镜像
docker load --input centos.tar
docker load < nginx.tar

运行一个web-应用

docker pull training/webapp

docker run -d -P training/webapp python app.py
# -P 将容器内部使用的网络端口映射到我使用的主机的随机端口上。返回容器id
# docker port id
# 0.0.0.0:32769->5000/tcp  5000端口映射到宿主机的32769端口上

 # 也可以通过-p来指定端口,此处是将docker的5000端口映射到宿主机的8080端口
docker run -d -p 8080:5000 training/webapp python app.py

# 监听日志
docker logs -f b611241d0f01

其他

# 创建并拉取busybox
docker run -it --name con01 busybox:latest

 # 获取环境变量
docker exec container_id env

# 杀掉所有正在运行的容器
docker kill $(docker ps -q)

# 删除老的(一周前创建)容器,注意命令必须是单引号
docker ps -a | grep 'weeks ago' | awk '{print $1}' | sed '1d' | xargs docker rm

# 删除所有的容器
docker ps -a | awk '{print $1}'| sed '1d' | xargs docker stop | xargs docker rm

# 删除已经停止的容器
docker rm `docker ps -a -q`

# 删除所有镜像,小心
docker rmi $(docker images -q)

1. 容器不是一个虚拟机,因为他就是一个进程,如果我们退出,这个进程就退出了

  1. 如果我们执行创建容器的时候,里面没有我们指定的镜像,那么他会从dockerhub上进行下载然后在启动
    原文作者:菜问
    原文地址: https://segmentfault.com/a/1190000019996589
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞