“Docker入门”的版本间的差异

来自linux中国网wiki
跳到导航 跳到搜索
 
(未显示同一用户的12个中间版本)
第3行: 第3行:
 
<pre>
 
<pre>
  
 +
如果要方便  怕权限问题 放到/tmp
 
docker cp :用于容器与主机之间的数据拷贝。
 
docker cp :用于容器与主机之间的数据拷贝。
 
1、从主机往容器中拷贝
 
1、从主机往容器中拷贝
第132行: 第133行:
 
[[DockerHub镜像加速]]
 
[[DockerHub镜像加速]]
  
 +
==docker pull proxy==
 +
<pre>
 +
 +
mkdir  /etc/systemd/system/docker.service.d/
 +
vim /etc/systemd/system/docker.service.d/http-proxy.conf
 +
[Service]
 +
Environment="HTTP_PROXY=http://192.168.10.105:1080"
 +
Environment="HTTPS_PROXY=http://192.168.10.105:1080"
 +
 +
systemctl  daemon-reload
 +
systemctl  restart docker
 +
 +
 +
 +
docker pull alpine
 +
Using default tag: latest
 +
latest: Pulling from library/alpine
 +
43c4264eed91: Pull complete
 +
Digest: sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d
 +
Status: Downloaded newer image for alpine:latest
 +
docker.io/library/alpine:latest
 +
 +
</pre>
 +
[https://neucrack.com/p/286 docker 设置代理,以及国内加速镜像设置  ]
  
 
=====see also=====
 
=====see also=====
第166行: 第191行:
  
 
=docker常用命令=
 
=docker常用命令=
 
+
[https://www.cnblogs.com/yinzhengjie/p/12189729.html Docker容器操作基础命令]
  
 
<pre>
 
<pre>
第279行: 第304行:
  
 
[https://yq.aliyun.com/articles/640877 “docker run”VS“docker exec这两个命令有区别]
 
[https://yq.aliyun.com/articles/640877 “docker run”VS“docker exec这两个命令有区别]
 +
==docker 环境变量==
 +
<pre>
 +
格式有两种:
 +
 +
    ENV key value
 +
    ENV key1=value1 key2=value2
 +
 +
 +
root@debian11:~# cat ins
 +
docker run -d \
 +
  --restart=unless-stopped \
 +
  --env KUBOARD_ADMIN_DERAULT_PASSWORD=evan123456  \ #这行就是我添加的环境变量
 +
  --name=kuboard \
 +
  -p 80:80/tcp \
 +
  -p 10081:10081/tcp \
 +
  -e KUBOARD_ENDPOINT="http://192.168.10.175:80" \
 +
  -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
 +
  -v /data/kuboard-data:/data \
 +
  eipwork/kuboard:v3
 +
</pre>
 +
 +
[https://www.cnblogs.com/KbMan/p/12029758.html Docker环境变量设置]
 +
 +
[https://www.cnblogs.com/vickey-wu/p/11079813.html  在docker镜像中加入环境变量]
 +
 +
==查看docker容器的资源使用docker stats ==
 +
<pre>
 +
  Demonstrate how you would log the resource usage of the containers every 10 seconds.
 +
 +
cat  10s.sh
 +
watch -n 10 "sudo  docker stats nginx1.15  --no-stream "
 +
</pre>
 +
 +
[https://blog.csdn.net/ternence_hsu/article/details/103399994  查看docker容器的资源使用详情]
 +
 +
[https://docs.docker.com/engine/reference/commandline/stats/ docker stats]
 +
 +
[https://www.cnblogs.com/sparkdev/p/7821376.html  查看 docker 容器使用的资源]
 +
 +
[https://cloud.tencent.com/developer/article/1541435 如何获得Docker容器资源统计信息]
  
 
=docker cp 数据交互 docker中宿主机与容器(container)互相拷贝传递文件=
 
=docker cp 数据交互 docker中宿主机与容器(container)互相拷贝传递文件=
第292行: 第357行:
 
将容器30026605dcfe的/home/cloudera/RS-MapReduce目录拷贝到主机的/tmp目录中。
 
将容器30026605dcfe的/home/cloudera/RS-MapReduce目录拷贝到主机的/tmp目录中。
 
docker cp  30026605dcfe:/home/cloudera/RS-MapReduce /tmp/</pre>
 
docker cp  30026605dcfe:/home/cloudera/RS-MapReduce /tmp/</pre>
 +
=与DockerFile=
 +
[https://www.cnblogs.com/liaojiafa/p/6151768.html  Docker探索系列2之镜像打包与DockerFile ]
 +
=docker build Dockerfile=
 +
<pre>
 +
 +
➜  hellodocker cat index.js
 +
console.log("welcome to docker world")
 +
➜  hellodocker cat Dockerfile
 +
FROM node:14-alpine
 +
COPY index.js /index.js
 +
CMD node /index.js
 +
 +
 +
sudo  docker build -t hello-docker .
 +
 +
 +
➜  hellodocker sudo docker run  hello-docker
 +
welcome to docker world
 +
➜  hellodocker
 +
 +
 +
 +
 +
</pre>
  
 
=trouble=
 
=trouble=
 +
== docker login ==
 +
<pre>
 +
login 问题
 +
 +
-sfo2-01:~# docker login --username= registry.cn-hangzhou.aliyuncs.com
 +
Password:
 +
Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`
 +
 +
 +
apt install gnupg2 pass
 +
2-01:~# docker login --username= registry.cn-hangzhou.aliyuncs.com
 +
Password:
 +
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
 +
Configure a credential helper to remove this warning. See
 +
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 +
 +
</pre>
 +
 +
 +
 
==容器关不了 ==
 
==容器关不了 ==
 
<pre>
 
<pre>
第353行: 第462行:
 
[https://www.cnblogs.com/followyou/p/10315717.html docker及服务器遇到的坑]
 
[https://www.cnblogs.com/followyou/p/10315717.html docker及服务器遇到的坑]
  
=参考=
+
=references=
 +
 
 +
[https://www.bilibili.com/video/BV14s4y1i7Vf?p=9&vd_source=e3e41ea2b1d70e0e3a6a0372ee88d714 B站30分钟Docker入门教程]
 +
 
  
 
[[Docker国内镜像的配置及使用]]
 
[[Docker国内镜像的配置及使用]]

2024年10月20日 (日) 15:40的最新版本

进阶


如果要方便  怕权限问题 放到/tmp 
docker cp :用于容器与主机之间的数据拷贝。
1、从主机往容器中拷贝
eg:将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。

docker cp /www/runoob 96f7f14e99ab:/www/

2、将容器中文件拷往主机
eg:将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。

docker cp  96f7f14e99ab:/www /tmp/

eg:将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。

docker cp /www/runoob 96f7f14e99ab:/www

调试 Docker 容器内部进程

入门

场景

Docker通常用于如下场景: web应用的自动化打包和发布;

自动化测试和持续集成、发布;

在服务型环境中部署和调整数据库或其他的后台应用;

从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

官方文档要求Linux kernel至少3.8以上,且docker只能运行在64位的系统中。由于RHEL6和CentOS6的内核版本为2.6,因此必须要先升级内核。

Docker 教程

加速

Docker国内镜像的配置及使用

安装

Docker and docker-compose快速安装 看这看这

官方教程

install-using-the-repository

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
systemctl enable docker && systemctl start docker

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

amazon-linux 2

 yum install -y docker

Docker CE and docker-compose Install on amazon linux2

install-from-a-package

1.install-from-a-package on centos

 yum install libtool-ltdl-2.4.2-22.el7_3.x86_64 container-selinux libcgroup  libseccomp libltdl.so #然后下载rpm包

download rpm

install-from-a-package oncentos


2.Install using the repository on debian

apt-get remove docker docker-engine docker.io containerd runc
apt  install software-properties-common

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common

 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

 sudo apt-key fingerprint 0EBFCD88
 sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
 apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

2.install-from-a-package on debian

Go to https://download.docker.com/linux/debian/dists/, choose your Debian version, browse to pool/stable/, choose either amd64 or armhf, and download the .deb file for the Docker CE version you want to install.

I am stretch so

apt install libltdl7

http://mirrors.aliyun.com/docker-ce/linux/debian/dists/stretch/pool/stable/amd64/

run

 sudo systemctl enable docker
 sudo systemctl start docker

docker代理设置

docker - 设置HTTP/HTTPS 代理

DockerHub镜像加速

docker pull proxy


mkdir  /etc/systemd/system/docker.service.d/
vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.10.105:1080"
Environment="HTTPS_PROXY=http://192.168.10.105:1080"

systemctl  daemon-reload 
 systemctl  restart docker 



 docker pull alpine 
Using default tag: latest
latest: Pulling from library/alpine
43c4264eed91: Pull complete 
Digest: sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

docker 设置代理,以及国内加速镜像设置

see also

https://docs.docker.com/install/linux/docker-ce/debian/#upgrade-docker-ce

Installing Docker in Kali Linux 2018.1

参考

Docker CE 镜像源站

Get Docker CE for CentOS

Python 开发者的 Docker 之旅


	
注意docker的网络基于NAT,重启宿主机器防火墙后,需要重启docker

推荐centos 7 运行docker
安装:
yum -y install docker-io

运行/停止/重启:
systemctl start docker
systemctl stop docker
systemctl restart docker

#开机自启动
systemctl enable docker.service

docker常用命令

Docker容器操作基础命令

docker inspect --format='{{.LogPath}}' containername

docker logs docker日志
#日志过滤
docker logs xx -f 2>&1| grep --line-buffered xxx

docker logs -f --tail 10 a4dac74d48f7


docker help (help 命令)
docker ps -a  查看容器运行情况
docker start/stop/restart  name(容器名称)  (启动/停止/重启)
docker search nginx 查找nginx 容器镜像
docker pull nginx 下载镜像
docker images name 查看本地已有镜像

docker rmi   删除images的命令 有f参数


#使用一下命令对镜像重启:
$docker restart imageid

#在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
$docker run --restart=always
#如果已经启动了则可以使用如下命令:
$docker update --restart=always <CONTAINER ID>

docker search jenkins
docker pull  docker.io/jenkins




docker run命令即是运行容器。其中涉及到很多参数,可以通过docker run --help命令查看,但一般用的比较多的是
-d 后台运行 -d, --detach      Run container in background and print container ID
-it 交互模式运行
--name 制定容器的名称
-h 制定容器的主机名
-p 分配对外端口给容器
-P 随机分配对外端口给容器
一般在最后加上镜像名

例如:                                   -p hostPort:containerPort
docker run --name=jenkins -it -u root -d -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home 3f08dc4f3f5d

--name=jenkins 命名  
-it  交互模式运行
-u root  root权限
-d 后台运行
-p 8080:8080 映射端口
-p 50000:50000 映射端口
-v /data/jenkins:/var/jenkins_home 映射目录
3f08dc4f3f5d  本地镜像ID  docker images name 命令可查看ID eg #docker images jenkins

docker-compose 
a.yml
    networks:
     - d_net
    container_name: "compose-mysql"


映射(例如“发布”)jenkinsci/blueocean 容器的端口8080到主机上的端口8080。 第一个数字代表主机上的端口,而最后一个代表容器的端口。因此,如果您为此选项指定 -p 49000:8080 ,您将通过端口49000访问主机上的Jenkins。
(可选)将 jenkinsci/blueocean 容器的端口50000 映射到主机上的端口50000。 如果您在其他机器上设置了一个或多个基于JNLP的Jenkins代理程序,而这些代理程序又与 jenkinsci/blueocean 容器交互(充当“主”Jenkins服务器,或者简称为“Jenkins主”), 则这是必需的。默认情况下,基于JNLP的Jenkins代理通过TCP端口50000与Jenkins主站进行通信。 

您可以通过“ 配置全局安全性” 页面更改Jenkins主服务器上的端口号。如果您要将您的Jenkins主机的JNLP代理端口的TCP端口 值更改为51000(例如),那么您需要重新运行Jenkins(通过此 docker run …​命令)并指定此“发布”选项 -p 52000:51000,其中最后一个值与Jenkins master上的这个更改值相匹配,第一个值是Jenkins主机的主机上的端口号, 通过它,基于JNLP的Jenkins代理与Jenkins主机进行通信 - 例如52000。
(可选,但强烈建议)映射在容器中的`/var/jenkins_home` 目录到具有名字 jenkins-data 的volume。 如果这个卷不存在,那么这个 docker run 命令会自动为你创建卷。 如果您希望每次重新启动Jenkins(通过此 docker run ... 命令)时保持Jenkins状态,则此选项是必需的 。 如果你没有指定这个选项,那么在每次重新启动后,Jenkins将有效地重置为新的实例。


登入容器:
docker exec -it jenkins /bin/bash


同步容器时间
在Dockerfile中加入
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && ntpdate cn.pool.ntp.org
或
容器运行后把容主机的/usr/share/zoneinfo/Asia/Shanghai 复制到容器的/etc/localtime

#先cp 到 /data/jenkins
cp  /usr/share/zoneinfo/Asia/Shanghai  /data/jenkins

--rm \ (可选)线上一般不用 jenkinsci/blueocean 关闭时自动删除Docker容器(下图为实例)。如果您需要退出Jenkins,这可以保持整洁

docker logs

docker logs --tail=10 

docker logs --since="2016-07-01" --tail=10 mynginx  #查看容器mynginx从2016年7月1日后的最新10条日志。

https://docs.docker.com/engine/reference/commandline/logs/

[译]如何将docker日志重定向到单个文件里

将日志输出到Docker容器外


Docker logs 命令

日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)

Docker logs 查看实时日志(日志最后的N行、某刻后日志

docker run VS docker exec

docker run”通常是在新创建的容器中所使用的命令。 它适用于在没有其他容器运行的情况下,您想要创建一个容器,并且要启动它,然后在其上运行一个进程

docker exec”适用于在现有容器中运行命令的情况。如果您已经拥有了一个正在运行的容器,并希望更改该容器或从中获取某些内容,那么使用“docker exec”命令就非常合适了。例如,如果您使用了 docker-compose,那么您可能会启动多个容器,并且希望能够在创建它们后访问其中的一个或多个容器

“docker run”VS“docker exec这两个命令有区别

docker 环境变量

格式有两种:

    ENV key value
    ENV key1=value1 key2=value2


root@debian11:~# cat ins 
docker run -d \
  --restart=unless-stopped \
  --env KUBOARD_ADMIN_DERAULT_PASSWORD=evan123456  \ #这行就是我添加的环境变量 
  --name=kuboard \
  -p 80:80/tcp \
  -p 10081:10081/tcp \
  -e KUBOARD_ENDPOINT="http://192.168.10.175:80" \
  -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
  -v /data/kuboard-data:/data \
  eipwork/kuboard:v3

Docker环境变量设置

在docker镜像中加入环境变量

查看docker容器的资源使用docker stats

  Demonstrate how you would log the resource usage of the containers every 10 seconds.

 cat  10s.sh 
 watch -n 10 "sudo  docker stats nginx1.15  --no-stream "

查看docker容器的资源使用详情

docker stats

查看 docker 容器使用的资源

如何获得Docker容器资源统计信息

docker cp 数据交互 docker中宿主机与容器(container)互相拷贝传递文件

Docker容器和主机如何互相拷贝传输文件

将主机./RS-MapReduce目录拷贝到容器30026605dcfe的/home/cloudera目录下。
docker cp RS-MapReduce 30026605dcfe:/home/cloudera

docker cp  bsd-daemon-tux-logo.png mediawiki:/etc/apt/


将容器30026605dcfe的/home/cloudera/RS-MapReduce目录拷贝到主机的/tmp目录中。
docker cp  30026605dcfe:/home/cloudera/RS-MapReduce /tmp/

与DockerFile

Docker探索系列2之镜像打包与DockerFile

docker build Dockerfile


➜  hellodocker cat index.js 
console.log("welcome to docker world")
➜  hellodocker cat Dockerfile 
FROM node:14-alpine
COPY index.js /index.js
CMD node /index.js


sudo  docker build -t hello-docker .


➜  hellodocker sudo docker run  hello-docker 
welcome to docker world
➜  hellodocker 




trouble

docker login

login 问题 

-sfo2-01:~# docker login --username= registry.cn-hangzhou.aliyuncs.com
Password: 
Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`


 apt install gnupg2 pass
2-01:~# docker login --username= registry.cn-hangzhou.aliyuncs.com
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store


容器关不了


问题 docker kill 也关不了 

格式
ps aux | grep <<container id>> | awk '{print $1 $2}'
sudo kill -9 <<process id from above command>>

eg 

root@--test:~# ps aux | grep  279c53f5b89b | awk '{print $1 $2}'
root4986
root11314
root11350
root@-test:~# kill -9 4986
root@lxtx-cailuw-test:~# kill -9 4986 11314 11350 
-bash: kill: (4986) - No such process
-bash: kill: (11350) - No such process


Docker stop或者Docker kill为何不能停止容器

https://www.cnblogs.com/shoufu/p/12978843.html


Error pulling image (2.8.21) from redis, endpoint: https://registry-1.docker.io/v1/, Get https://registry-1.docker.io/v1/images/1a721decd792ad1d3c4ebc315d34b1f8d4dfb97e6d8013efe6c523e637361bd6/ancestry: read tcp 
1a721decd792: Error pulling image (2.8.21) from redis, Get https://registry-



修改Docker配置文件/etc/default/docker如下:

DOCKER_OPTS="--registry-mirror=http://aad0405c.m.daocloud.io"
使用service docker restart重启Docker服务即可。



解决docker x509: certificate has expired or is not yet valid
把系统时间改回来就行了 

ntpdate cn.pool.ntp.org #同步一下时间
17 Apr 17:40:45 ntpdate[32206]: step time server 202.112.29.82 offset 5262859.193967 sec

date “+%Y-%m-%d” #时间同步成功
2015-04-17

Centos7 NTP网络时间协议

err see also

解决docker x509: certificate has expired or is not yet valid

docker及服务器遇到的坑

references

B站30分钟Docker入门教程


Docker国内镜像的配置及使用

docker 的常用参数和解析


docker常规操作——启动、停止、重启容器实例


Docker容器和数据可视化管理工具Flocker

Flocker浅析与Docker插件(1)

Flocker浅析与Docker插件(2)

Flocker 做为后端存储代理 docker volume-driver 支持

打包 Docker 与数据,Flocker 实现整体轻松迁移


Docker 1.9 Overlay Network实现跨主机网络互通

Docker笔记 Docker 入门实战


coreos-installing-to-disk

Docker run 命令的使用方法

Docker学习路线图 (持续更新中)

grep 不能过滤持续的 log

[http://yaxin-cn.github.io/Docker/how-to-delete-a-