Bağımlılıklarımı bir Sürekli Entegrasyon (CI) sunucusunda oluşturmak için Docker kullanmayı düşünüyorum, böylece tüm çalışma zamanlarını ve kütüphaneleri aracıların kendilerine yüklemek zorunda kalmayacağım.
Bunu başarmak için konteyner içinde inşa edilen yapı eserlerini ana bilgisayara geri kopyalamam gerekir. Bu mümkün mü?
Bir dosyayı bir konteynerden ana bilgisayara kopyalamak için şu komutu kullanabilirsiniz
docker cp <containerId>:/file/path/within/container /host/path/target
İşte bir örnek:
$ sudo docker cp goofy_roentgen:/out_read.jpg .
Burada goofy_roentgen aşağıdaki komuttan elde ettiğim konteyner adıdır:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b4ad9311e93 bamos/openface "/bin/bash" 33 minutes ago Up 33 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp goofy_roentgen
Ayrıca Konteyner Kimliği'nin (bir kısmını) da kullanabilirsiniz. Aşağıdaki komut ilkine eşdeğerdir
$ sudo docker cp 1b4a:/out_read.jpg .
Bir "volume" bağlayın ve eserleri buraya kopyalayın:
mkdir artifacts
docker run -i -v ${PWD}/artifacts:/artifacts ubuntu:14.04 sh << COMMANDS
# ... build software here ...
cp <artifact> /artifacts
# ... copy more artifacts into `/artifacts` ...
COMMANDS
Daha sonra derleme bittiğinde ve konteyner artık çalışmadığında, derlemedeki artifaktları ana bilgisayardaki artifacts
dizinine kopyalamış olur.
Caveat: Bunu yaptığınızda, docker kullanıcısının kullanıcı kimliğinin mevcut çalışan kullanıcının kullanıcı kimliğiyle eşleşmesiyle ilgili sorunlarla karşılaşabilirsiniz. Yani, /artifacts
içindeki dosyalar, docker konteynerinin içinde kullanılan kullanıcının UID'sine sahip kullanıcı tarafından sahiplenilmiş olarak gösterilecektir. Bunu aşmanın bir yolu, çağıran kullanıcının UID'sini kullanmak olabilir:
docker run -i -v ${PWD}:/working_dir -w /working_dir -u $(id -u) \
ubuntu:14.04 sh << COMMANDS
# Since $(id -u) owns /working_dir, you should be okay running commands here
# and having them work. Then copy stuff into /working_dir/artifacts .
COMMANDS
Bir birimi monte edin, eserleri kopyalayın, sahip kimliğini ve grup kimliğini ayarlayın:
mkdir artifacts
docker run -i --rm -v ${PWD}/artifacts:/mnt/artifacts centos:6 /bin/bash << COMMANDS
ls -la > /mnt/artifacts/ls.txt
echo Changing owner from \$(id -u):\$(id -g) to $(id -u):$(id -u)
chown -R $(id -u):$(id -u) /mnt/artifacts
COMMANDS