Docker
Docker 笔记
-
+
首页
Docker 笔记
# Docker 笔记 [toc] ---- ### Docker 安装后报 ERROR **Docker 安装后报 ERROR:** > ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? **解决办法:** ```bash sudo systemctl daemon-reload sudo systemctl restart docker.service # sudo service docker restart sudo systemctl status docker # sudo service docker status ``` **Docker 安装后报:** > Cannot connect to the Docker daemon at tcp://0.0.0.0:2375. Is the docker daemon running? **解决办法:** 1. 配置DOCKER_HOST ```bash echo "export DOCKER_HOST=tcp://0.0.0.0:2375" | sudo tee /etc/profile.d/docker.sh ``` 2. 应用 ```bash source /etc/profile ``` 3. 配置启动文件 ```bash sudo vi /usr/lib/systemd/system/docker.service # 将其中第11行的 ExecStart=/usr/bin/dockerd 替换为 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654 # OR sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock|g" /usr/lib/systemd/system/docker.service ``` > 此处默认2375为主管理端口,unix:///var/run/docker.sock用于本地管理,7654是备用的端口 4. 重载配置和重启 ```bash sudo systemctl daemon-reload sudo systemctl restart docker.service ``` ### Docker 启动报 ERROR **Docker 启动报:** >Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 一般是由于`/etc/docker/daemon.json`里面配置有误 ### 查看 Docker Linux 容器系统对应发行版本 ```bash cat /etc/issue ``` [docker-install](https://github.com/docker/docker-install.git) ### docker服务设置自动启动 1. 查看已启动的服务: ```bash sudo systemctl list-units --type=service ``` 2. 查看是否设置开机启动: ```bash sudo systemctl list-unit-files | grep enable ``` 3. 设置开机启动: ```bash sudo systemctl enable docker.service sudo systemctl enable containerd.service ``` 4. 关闭开机启动: ```bash sudo systemctl disable docker.service sudo systemctl disable containerd.service ``` 5. 创建`docker`组 ```bash sudo groupadd docker ``` 6. 将您的用户添加到`docker`组中 ```bash sudo usermod -aG docker $USER ``` ### docker容器设置自动启动 > 启动时加 --restart=always ```bash docker run -it --name redis --privileged=true --restart=always -p 6379:6379 -d redis:5 redis-server ``` > Flag Description > > no 不自动重启容器. (默认value) > > on-failure 容器发生error而退出(容器退出状态不为0)重启容器 > > unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器 > > always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器 > > **如果已经启动的项目,则使用update更新:** ```bash # docker update --restart=always [CONTATINER] docker update --restart=always redis ``` ### Docker 修改容器名字 ```bash docker rename --help docker rename CONTAINER NEW_NAME ``` ### Docker 镜像重命名 ```bash docker tag --help docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] ``` ### Docker cp 命令 > 用于容器与主机之间的数据拷贝 1. 从容器拷到宿主机: ```bash docker cp [OPTIONS] [CONTAINER_NAME]:SRC_PATH DEST_PATH # eg: 将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中 docker cp 96f7f14e99ab:/www /tmp/ ``` 2. 从宿主机拷到容器: ```bash docker cp [OPTIONS] SRC_PATH [CONTAINER_NAME]:DEST_PATH # eg: 将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下 docker cp /www/runoob 96f7f14e99ab:/www/ # eg: 将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www docker cp /www/runoob 96f7f14e99ab:/www ``` > OPTIONS说明: > > -L :保持源目标中的链接 ### Docker ps 命令 **docker ps --format参数可以实现格式化输出自定义列** ``` --format="TEMPLATE" Pretty-print containers using a Go template. Valid placeholders: .ID - Container ID .Image - Image ID .Command - Quoted command .CreatedAt - Time when the container was created. .RunningFor - Elapsed time since the container was started. .Ports - Exposed ports. .Status - Container status. .Size - Container disk size. .Names - Container names. .Labels - All labels assigned to the container. .Label - Value of a specific label for this container. For example {{.Label "com.docker.swarm.cpu"}} .Mounts - Names of the volumes mounted in this container. ``` ```bash docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}\t{{.Status}}" ``` 在显示容器列表的命令后面加上 `--no-trunc` , 可以显示列的完整信息 ```bash docker ps -a --no-trunc ``` ### Docker 启动实例 **运行容器进行测试:** ```bash docker run -it --rm container ``` **Docker 启动实例:** ```bash # eg: docker run --privileged --name oracle-11-xe --shm-size=1g -p 1521:1521 oracle/database:11.2.0.2-xe # eg: docker build -t oracle/database:11.2.0.2-xe --shm-size=1g -f ./Dockerfile.11.2.0.1.0 . ``` **创建一个守护态的Docker容器:** ```bash sudo docker run -itd ubuntu:16.04 /bin/bash ``` ### docker exec进入容器 **docker exec进入Docker容器:** ```bash docker exec --help ``` > Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] > > Run a command in a running container > > Options: > > -d, --detach Detached mode: run command in the background > > --detach-keys string Override the key sequence for detaching a container > > -e, --env list Set environment variables (default []) > > --help Print usage > > -i, --interactive Keep STDIN open even if not attached > > --privileged Give extended privileges to the command > > -t, --tty Allocate a pseudo-TTY > > -u, --user string Username or UID (format: <name|uid>[:<group|gid>]) 命令如下: > -it 标准输入和关联伪终端, -it后跟容器ID, /bin/bash是命令, 表示在该容器中运行该命令 ```bash sudo docker exec -it 775c7c9ee1e1 /bin/bash ``` > exit: 进行退出并关闭容器 > > Ctrl+P+Q: 进行退出不关闭容器 ### docker容器和镜像的导入导出 1. **镜像导出 save** 1. **查看镜像:** ``` docker images ``` 2. **导出镜像:** ```bash # docker save -o <保存路径> <镜像名称:标签> docker save -o test.tar image_name ``` **或** ```bash # docker save <镜像名称:标签> > <保存路径> docker save image_name > /test.tar ``` 2. 容器导出 export ```bash # docker export [-o|--output[=""]] CONTATINER # docker export [container_id]/[container_name] > [container_name].tar # docker export -o test.img [container_name] # eg: docker export -o test.img test # test.img : 这里可以导出tar文件 , 也可以导出二进制镜像文件img # test : 需要导出的容器名, 通过docker ps查看 ``` 3. 导入压缩包(包括压缩的镜像和容器) **import** ```bash # docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:YAG]] # eg: docker import test.img test #test : 为镜像名 ``` **load** ```bash docker load -i /test.tar docker load --input /test.tar ``` > 区别: > > docker save保存的是镜像(image) > > docker export保存的是容器(container) > > > > docker load 用来载入镜像包 > > docker import 用来载入容器包,但两者都会恢复为镜像; > > > > docker load 不能对载入的镜像重命名 > > docker import可以为镜像指定新名称。 4. **部署镜像** **启动镜像** ```bash docker run -d --name container_test --privileged -it test:latest /usr/sbin/init ``` **进入镜像** ```bash docker exec -it container_id /bin/bash ``` ### 常用命令 1. **镜像相关** > docker search java 在Docker Hub(或阿里镜像)仓库中搜索关键字(如java)的镜像 > > docker pull java:8 从仓库中下载镜像,若要指定版本,则要在冒号后指定 > > docker images 列出已经下载的镜像 > > docker rmi java 删除本地镜像 > > docker build 构建镜像 2. **容器相关** >docker run -d -p 91:80 nginx 在后台运行nginx, 若没有镜像则先下载, 并将容器的80端口映射为宿主机的91端口 > > -d: 后台运行 > > -P: 随机端口映射 > > -p: 指定端口映射 > > -net: 网络模式 > > > >docker ps # 列出运行中的容器 > >docker ps -a # 列出所有的容器 > >docker stop [container_id] # 停止容器 > >docker kill [container_id] # 强制停止容器 > >docker start [container_id] # 启动已停止的容器 > >docker inspect [container_id] # 查看容器的所有信息 > >docker container logs [container_id] # 查看容器日志 > >docker top [container_id] # 查看容器里的进程 > >docker exec -it [container_id] /bin/bash # 进入容器 > >exit # 退出容器 > >docker rm [container_id] # 删除已停止的容器 > >docker rm -f [container_id] # 删除正在运行的容器 ### docker批量删除容器、镜像 1、删除所有容器 \# docker rm $(docker ps -aq) docker rm `docker ps -a -q` 这里 docker ps 的命令包括: 1)-a 列出所有容器 2)-l 列出最新创建容器 3)-n=2 列出最近创建的2个容器 4)-q 仅列出容器ID 5)-s 显示容器大小 所以docker ps -aq 相当于列出所有的容器ID,然后docker rm它们 但是要注意的是,如果容器正在运行是无法删除,需要先停止: docker stop $(docker ps -aq) 2、删除所有镜像 镜像删除语法为: docker rmi [OPTIONS] [IMAGEID] OPTIONS 的参数包括:-f 强制删除,–no-prune: 不移除镜像产生的过程镜像。默认为移除。 docker rmi $(docker images -aq) 这里的-aq显示的是image的ID docker rmi `docker images -q` 3、按条件删除镜像 没有打标签 docker rmi `docker images -q | awk '/^<none>/ { print $3 }'` docker rmi $(docker images -a | grep none | awk '{ print $3 }') 也可以写成: docker images -a | grep none | awk '{print $1}' | xargs docker rmi 通过xagrs传入参数 有些什么情况会产生none的镜像? 1)在镜像创建过程中创建失败,会产生无效的none镜像 2)pull镜像。镜像的垂直父子关系 3)使用dockerfile文件创建镜像,重新生成,新的镜像名赋给后者,前面的镜像名字为none 镜像名包含关键字 docker rmi --force `docker images | grep doss-api | awk '{print $3}'` //其中doss-api为关键字
skeitr
2023年7月10日 11:28
转发文档
收藏文档
上一篇
下一篇
Markdown文件
分享
链接
类型
密码
更新密码