spylyt 2019-11-04
[info] 生产中一般都是通过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
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)
[info] 1. 容器不是一个虚拟机,因为他就是一个进程,如果我们退出,这个进程就退出了
- 如果我们执行创建容器的时候,里面没有我们指定的镜像,那么他会从dockerhub上进行下载然后在启动