docker 命令
一、docker仓库
docker hub存放各种docker镜像,https://hub-stage.docker.com/
比如直接在里面搜python,就可以在Tags中找到python苗条版python:slim
比较常用运行容器的命令
# 说明-p 主机端口:容器端口, -P将该镜像expose定义的所有端口随机暴露到宿主机的高分布端口上
docker run -dit --name centos7 --privileged -p 8080:8080 -p 80:80 -v "d:/volumes":/data centos:7 /usr/sbin/init
# 进入容器,返回使用ctrl+D
docker exec -it container_id /bin/bash
# 批量开启容器与关闭容器,NR为awk变量,表示第几行,1.2.3..
docker ps | awk 'NR>1{print $1}' | xargs docker stop
docker ps -a | awk 'NR>1{print $1}' | xargs docker start
二、常用命令
commands
docker cp CONTAINER:SRC_PATH DEST_PATH
docker cp SRC_PATH CONTAINER:DEST_PATH
docker inspect NAME|ID...
docker port CONTAINER
docker rm CONTAINER...
docker rmi IMAGE...
docker start CONTAINER...
docker stop CONTAINER...
docker restart CONTAINER...
docker kill CONTAINER...
docker rename CONTAINER NEW_NAME
docker top CONTAINER
# 1、搜索容器
docker search tutorial
# 2、下载容器,镜像都是按照 “用户名/镜像名” 的方式进行存储的
docker pull learn/tutorial
# 3、查看已经下载的镜像信息(均可):
docker images
docker image ls
# 4、在一个容器中运行命令,可以指定命令也可以不指定命令,不同的镜像有差异
docker run IMAGE [COMMAND] [ARG...]
docker run learn/tutorial echo "hello world"
# 在容器中安装一个ping工具
docker run learn/tutorial apt-get install -y ping
# 5、在制作新镜像,使用commit进行提交
# (1)、需要得到你修改的容器的id号
docker ps -l # 得到最新创建的容器
docker container ls --all
# (2)、将容器制作成镜像
docker commit container_id IMAGE_NAME
# 如:docker commit 4d9272df31c0 learn/ping
# (3)、通过查看镜像,就会多了一个learn/ping镜像,这个镜像就可以直接使用了
docker run learn/ping ping www.baidu.com
# 6、检查运行中的镜像
docker ps
docker inspect container_id #查看指定容器的详细信息
# 7、把自己创建的镜像发布到官网上,可供别人使用
docker push learn/ping
# 在这之前需要先登录自己的dockerhub帐号,使用docker login方式按照提示进行登录,在push自己的镜像之前,需要修改镜像名为规定的格式 xxxx/image_name:TAG
docker tag old:TAG theorydance/new:TAG # 修改为自己的命名开头
# 比如我的推送:docker push theorydance/mysql:5.6
# 8、导入与导出
# 8.1 导出容器变为一个本地镜像文件(利用该文件)可以拷贝到其他终端
docker export CONTAINER_ID -o xxxx.tar
# 8.2 本地镜像导出为tar包
docker image save -o ghcr.io.linuxserver.dokuwiki.latest.tar ghcr.io/linuxserver/dokuwiki:latest
# 8.3 导入本地tar包变为镜像
docker import xxxx.tar theorydance/yyy:latest
docker image import ghcr.io.linuxserver.dokuwiki.latest.tar ghcr.io/linuxserver/dokuwiki:latest
# 9、进入正在运行的docker容器
# 9.1这种方式,所有人进入显示的信息是同步的,如果一个客户端阻塞,则所有的都会阻塞
docker attach container_id
# 9.2该方式进行基本上最简单,注意:如果在里面把运行的进程杀掉,因为容器里没有运行的任何东西,就自动关闭了
docker exec -it container_id /bin/bash
# 9.3在创建容器的时候使用
docker run -itd learn/ping /bin/bash
# 9.4从容器里退出,不是输入exit
ctrl + D
# 10、镜像文件的编译执行:在网上找到镜像文件后,比如https://github.com/docker-library/mysql/blob/4af273a07854d7e4b68c5148b8e23b86aa8706e2/8.0/Dockerfile
# 将内容复制保存到一个名为Dockerfile的文件下,并放到一个目录下,然后命令行切换到该目录,执行以下命令即可:
docker image build -t theorydance/mysql:8.0 .
# 11、挂载磁盘
docker run -dit --name centos7 -v "d:/volumes":/data centos:7 bash
# 12、docker状态
service docker start
service docker status
service docker stop
# docker有很多命令使用,使用docker run --help方式可以进行查看
docker container --help等
docker --help
# 查看镜像对应的操作系统与架构,输出如:'linux/amd64'
docker inspect --format='{{.Os}}/{{.Architecture}}' <image-name-or-id>
三、docker容器设置固定IP:
1、需要创建一个自己的网络:
docker network create --subnet=172.18.0.0/16 mynet
docker network ls # 查看拥有的网络
2、在创建容器的时候,制定IP
docker run -itd --name test2 --network mynet --ip 172.18.0.2 centos bash
四、遇到的问题及解决
(1)如果在centos的docker容器中,出现systemctl不能用的情况,使用如下方式解决
docker run --privileged -dit centos /usr/sbin/init
# 常用centos对应的容器启动
# centos:7镜像 大小204M,后面的指令,一般久/usr/sbin/init, /bin/bash, /bin/sh
docker run -dit --name centos7 --privileged -p 8080:8080 -p 80:80 -v "d:/volumes":/data centos:7 /usr/sbin/init
# dokken/centos-8镜像 大小589M docker pull dokken/centos-8
docker run -dit --name centos8 --privileged -p 22:22 dokken/centos-8:latest /usr/sbin/init
# 在docker容器中,经常没有ll命令,在/root/.bashrc 中添加 alias ll='ls $LS_OPTIONS -l' ,然后刷新source /root/.bashrc 使其生效
(2)docker容器跨宿主机通信
https://blog.csdn.net/wo18237095579/article/details/83991893#_overlay_network_61
https://www.cnblogs.com/bigberg/p/8521542.html
十、参考:
【1】参考网站docker中文网 http://www.docker.org.cn/book/docker/docker-push-image-13.html
【2】docker设置固定IP https://www.cnblogs.com/xuezhigu/p/8257129.html